package l1j.server.server.clientpackets;
import static l1j.server.server.model.item.L1ItemId.B_POTION_OF_EXTRA_HEALING;
import static l1j.server.server.model.item.L1ItemId.B_POTION_OF_GREATER_HEALING;
import static l1j.server.server.model.item.L1ItemId.B_POTION_OF_HEALING;
import static l1j.server.server.model.item.L1ItemId.CONDENSED_POTION_OF_EXTRA_HEALING;
import static l1j.server.server.model.item.L1ItemId.CONDENSED_POTION_OF_GREATER_HEALING;
import static l1j.server.server.model.item.L1ItemId.CONDENSED_POTION_OF_HEALING;
import static l1j.server.server.model.item.L1ItemId.C_POTION_OF_HEALING;
import static l1j.server.server.model.item.L1ItemId.POTION_OF_EXTRA_HEALING;
import static l1j.server.server.model.item.L1ItemId.POTION_OF_GREATER_HEALING;
import static l1j.server.server.model.item.L1ItemId.POTION_OF_HEALING;
import static l1j.server.server.model.item.L1ItemId.RABBIT_LIVER;
import static l1j.server.server.model.skill.L1SkillId.ADDITIONAL_FIRE;
import static l1j.server.server.model.skill.L1SkillId.AWAKEN_ANTHARAS;
import static l1j.server.server.model.skill.L1SkillId.AWAKEN_FAFURION;
import static l1j.server.server.model.skill.L1SkillId.AWAKEN_VALAKAS;
import static l1j.server.server.model.skill.L1SkillId.BOUNCE_ATTACK;
import static l1j.server.server.model.skill.L1SkillId.COUNTER_BARRIER;
import static l1j.server.server.model.skill.L1SkillId.DRAGON_SKIN;
import static l1j.server.server.model.skill.L1SkillId.EXP_UP;
import static l1j.server.server.model.skill.L1SkillId.ILLUSION_AVATAR;
import static l1j.server.server.model.skill.L1SkillId.ILLUSION_DIA_GOLEM;
import static l1j.server.server.model.skill.L1SkillId.ILLUSION_LICH;
import static l1j.server.server.model.skill.L1SkillId.ILLUSION_OGRE;
import static l1j.server.server.model.skill.L1SkillId.INSIGHT;
import static l1j.server.server.model.skill.L1SkillId.MIRROR_IMAGE;
import static l1j.server.server.model.skill.L1SkillId.MapTimer;
import static l1j.server.server.model.skill.L1SkillId.PANIC;
import static l1j.server.server.model.skill.L1SkillId.PATIENCE;
import static l1j.server.server.model.skill.L1SkillId.POLLUTE_WATER;
import static l1j.server.server.model.skill.L1SkillId.REDUCTION_ARMOR;
import static l1j.server.server.model.skill.L1SkillId.SOLID_CARRIAGE;
import static l1j.server.server.model.skill.L1SkillId.SOUL_OF_FLAME;
import static l1j.server.server.model.skill.L1SkillId.STATUS_HOLY_MITHRIL_POWDER;
import static l1j.server.server.model.skill.L1SkillId.STATUS_HOLY_WATER;
import static l1j.server.server.model.skill.L1SkillId.STATUS_HOLY_WATER_OF_EVA;
import static l1j.server.server.model.skill.L1SkillId.AI_CheckEffect;
import static l1j.server.server.model.skill.L1SkillId.解卡點卷軸;
import static l1j.server.server.model.skill.L1SkillId.加速器檢測;
import static l1j.server.server.model.skill.L1SkillId.惡魔的香水;
import static l1j.server.server.model.skill.L1SkillId.蒜頭雞湯;
import static l1j.server.server.model.skill.L1SkillId.烏骨雞湯;
import static l1j.server.server.model.skill.L1SkillId.人參雞湯;
import static l1j.server.server.model.skill.L1SkillId.ATTRACT_MONSTER;
import static l1j.server.server.model.skill.L1SkillId.PC_IsPinkName;

import java.lang.reflect.Constructor;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import l1j.opqlo.C_ItemUse_PART2.C_BravePotion;
import l1j.opqlo.C_ItemUse_PART2.C_MakeCook;
import l1j.opqlo.C_ItemUse_PART2.C_PolyMorph;
import l1j.opqlo.C_ItemUse_PART2.C_ScrollOfEnchant;
import l1j.opqlo.C_ItemUse_PART2.C_SpellBooks;
import l1j.opqlo.C_ItemUse_PART2.C_opqloSpecial;
import l1j.opqlo.List.特殊列表;
import l1j.opqlo.NewSystem.A_ColorMessage;
import l1j.opqlo.NewSystem.各項記錄輸出;
import l1j.opqlo.NewSystem.Extension.TreasureMaster;
import l1j.opqlo.NewSystem.Extension.FireRoom.FireRoomThread;
import l1j.opqlo.NewSystem.ItemLevelUp.ItemLevelUp;
import l1j.opqlo.NewSystem.ItemLevelUp.ItemLevelUpTable;
import l1j.opqlo.NewSystem.地圖限時.MapTimeControl;
import l1j.opqlo.NewSystem.地圖限時.MapTimeTable;
import l1j.opqlo.NewSystem.鑑定系統.IdentifiedModel;
import l1j.opqlo.NewSystem.鑑定系統.IdentifiedTable;
import l1j.opqlo.NewSystem.鑑定系統.L1IdStatus;
import l1j.opqlo.Server.L1World.L1World;
import l1j.opqlo.Server.L1World.WorldClan;
import l1j.opqlo.Server.etcitem.Card;
import l1j.opqlo.Server.etcitem.Dice;
import l1j.opqlo.Server.etcitem.ElixirStats;
import l1j.opqlo.Server.etcitem.Fish;
import l1j.opqlo.Server.etcitem.Food;
import l1j.opqlo.Server.etcitem.Furniture;
import l1j.opqlo.Server.etcitem.Light;
import l1j.opqlo.Server.etcitem.MagicDoll;
import l1j.opqlo.Server.etcitem.PetCollar;
import l1j.opqlo.Server.etcitem.卷軸.BlankMagicScroll;
import l1j.opqlo.Server.etcitem.卷軸.PolyScroll;
import l1j.opqlo.Server.etcitem.卷軸.ReactivatingScroll;
import l1j.opqlo.Server.etcitem.卷軸.TeleportScroll;
import l1j.opqlo.Timer.Controler.Server.ServerWarExecutor;
import l1j.opqlo.掛機.RobotTemp;
import l1j.opqlo.掛機.RobotThread;
import l1j.server.Config;
import l1j.server.echo.ClientThread;
import l1j.server.server.ActionCodes;
import l1j.server.server.IdFactory;
import l1j.server.server.datatables.CastleTable;
import l1j.server.server.datatables.CharacterTable;
import l1j.server.server.datatables.DecomposeTable;
import l1j.server.server.datatables.FurnitureSpawnTable;
import l1j.server.server.datatables.ItemTable;
import l1j.server.server.datatables.NpcTable;
import l1j.server.server.datatables.ResolventTable;
import l1j.server.server.datatables.SkillsTable;
import l1j.server.server.datatables.lock.AccountReading;
import l1j.server.server.model.Getback;
import l1j.server.server.model.L1CastleLocation;
import l1j.server.server.model.L1Character;
import l1j.server.server.model.L1Clan;
import l1j.server.server.model.L1Cooking;
import l1j.server.server.model.L1EffectSpawn;
import l1j.server.server.model.L1HouseLocation;
import l1j.server.server.model.L1Inventory;
import l1j.server.server.model.L1ItemDelay;
import l1j.server.server.model.L1Object;
import l1j.server.server.model.L1Party;
import l1j.server.server.model.L1PcInventory;
import l1j.server.server.model.L1PolyMorph;
import l1j.server.server.model.L1Quest;
import l1j.server.server.model.L1Teleport;
import l1j.server.server.model.L1TownLocation;
import l1j.server.server.model.Instance.L1DollInstance;
import l1j.server.server.model.Instance.L1EffectInstance;
import l1j.server.server.model.Instance.L1FurnitureInstance;
import l1j.server.server.model.Instance.L1GuardianInstance;
import l1j.server.server.model.Instance.L1HummerInstance;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1MonsterInstance;
import l1j.server.server.model.Instance.L1NpcInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.Instance.L1PetInstance;
import l1j.server.server.model.item.L1ItemId;
import l1j.server.server.model.item.L1TreasureBox;
import l1j.server.server.model.map.L1Map;
import l1j.server.server.model.map.L1WorldMap;
import l1j.server.server.model.poison.L1DamagePoison;
import l1j.server.server.model.skill.L1BuffUtil;
import l1j.server.server.model.skill.L1SkillUse;
import l1j.server.server.serverpackets.S_AddItem;
import l1j.server.server.serverpackets.S_AttackPacket;
import l1j.server.server.serverpackets.S_DeleteInventoryItem;
import l1j.server.server.serverpackets.S_DoActionGFX;
import l1j.server.server.serverpackets.S_EffectLocation;
import l1j.server.server.serverpackets.S_IdentifyDesc;
import l1j.server.server.serverpackets.S_ItemName;
import l1j.server.server.serverpackets.S_ItemStatus;
import l1j.server.server.serverpackets.S_Letter;
import l1j.server.server.serverpackets.S_Liquor;
import l1j.server.server.serverpackets.S_MPUpdate;
import l1j.server.server.serverpackets.S_Message_YN;
import l1j.server.server.serverpackets.S_MoveCharPacket;
import l1j.server.server.serverpackets.S_NPCTalkReturn;
import l1j.server.server.serverpackets.S_OwnCharAttrDef;
import l1j.server.server.serverpackets.S_OwnCharStatus;
import l1j.server.server.serverpackets.S_PacketBox;
import l1j.server.server.serverpackets.S_Paralysis;
import l1j.server.server.serverpackets.S_PinkName;
import l1j.server.server.serverpackets.S_RemoveObject;
import l1j.server.server.serverpackets.S_SPMR;
import l1j.server.server.serverpackets.S_ServerMessage;
import l1j.server.server.serverpackets.S_SkillSound;
import l1j.server.server.serverpackets.S_Sound;
import l1j.server.server.serverpackets.S_SystemMessage;
import l1j.server.server.serverpackets.S_UseAttackSkill;
import l1j.server.server.templates.L1Account;
import l1j.server.server.templates.L1Armor;
import l1j.server.server.templates.L1Castle;
import l1j.server.server.templates.L1EtcItem;
import l1j.server.server.templates.L1Item;
import l1j.server.server.templates.L1Npc;
import l1j.server.server.templates.L1Skills;
import l1j.server.server.utils.CheckUtil;
import l1j.server.server.utils.L1SpawnUtil;
import l1j.server.server.utils.Random;

import java.sql.Connection;//TODO 解卡點卷軸
import java.sql.PreparedStatement;//TODO 解卡點卷軸

import l1j.server.DatabaseFactory;//TODO 解卡點卷軸
import l1j.william.ItemMagic;//TODO 魔法道具系統&召換系統
import l1j.william.L1WilliamItemMagic;//TODO 魔法道具系統&召換系統
import l1j.william.L1WilliamItemSummon;//TODO 魔法道具系統&召換系統
import l1j.william.L1WilliamTeleportScroll;
/**
 * TODO: 翻譯，太多了= = 處理收到由客戶端傳來使用道具的封包
 */
public class C_ItemUSe extends ClientBasePacket {

	private static final String C_ITEM_USE = "[C] C_ItemUSe";
	private static final int WEAPON_MAX_ENCHANT_LV = 4050;
	private static final int ARMOR_MAX_ENCHANT_LV = 600;
	private static Logger _log = Logger.getLogger(C_ItemUSe.class.getName());
	private static final int[][] loc ={
		//	{5,32767,25,32849},
		{30,32719,5,32830},
		{5,32764,14,32801},
		{69,32720,3,32802},
		{23,32797,3,32831}
	};

	private static final String[] ENCHANT_MSG ={"大笑","憂鬱","暗爽","偷偷","興奮","咪咪笑","驕傲","頭歪歪","慚愧","感動"};
	private static final String[] ENCHANT_MSG2 ={"拿現金來買!","陪我睡一晚再說!","叫爸爸買給你!","吃屁吧你!","跟我打一場阿!","我偏不給!","10萬賣你啊!","我不小心丟地上了!","我分身都拿比這好!","去偉大的航道上找!"};

	@Override
	public void start(final byte[] decrypt, final ClientThread client){//throws Exception {
		try {
			// 資料載入
			read(decrypt);
			final L1PcInstance pc = client.getActiveChar();
			if (pc==null || pc.Canuse() ) {//opqlo 掛機檢測
				return;
			}
			if(pc.isInHell()){
				pc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_TELEPORT_UNLOCK, true));
				pc.sendPackets(new S_ServerMessage(563)); // \f1ここでは使えません。
				return;
			}

			// 使用物件的OBJID
			final int itemObjid = readD();
			// 取回使用物件
			final L1ItemInstance l1iteminstance = pc.getInventory().getItem(itemObjid);

			if (l1iteminstance == null) {
				return;
			}
			if (l1iteminstance.getItem().getUseType() == -1) { // none:使用できないアイテム
				pc.sendPackets(new S_ServerMessage(74, l1iteminstance.getLogName())); // \f1%0は使用できません。
				return;
			}
			if (!pc.getMap().isUsableItem() || pc.isPrivateShop()) {
				pc.sendPackets(new S_ServerMessage(563)); // \f1ここでは使えません。
				return;
			}


			//道具使用開始判定 OPQLO
			if (pc.getCurrentHp() > 0) {
				int l = 0;
				//		String s = "";
				int spellsc_objid = 0;
				int spellsc_x = 0;
				int spellsc_y = 0;
				int cookStatus = 0;
				int cookNo = 0;
				int itemId;


				/**取得道具編號*/
				try {
					itemId = l1iteminstance.getItem().getItemId();
				} catch (Exception e) {
					return;
				} 
				/************************************  武  器  類  ***************************************************/
				if (l1iteminstance.getItem().getType2() == 1) {
					// 種別：武器
					final int min = l1iteminstance.getItem().getMinLevel();
					final int max = l1iteminstance.getItem().getMaxLevel();
					if (min != 0 && min > pc.getLevel()) {
						// このアイテムは%0レベル以上にならなければ使用できません。
						pc.sendPackets(new S_SystemMessage("等級" + min+ "以上才可使用此道具。"));
					} else if (max != 0 && max < pc.getLevel()) {
						// このアイテムは%dレベル以下のみ使用できます。
						// S_ServerMessageでは引數が表示されない
						if (max < 50) {pc.sendPackets(new S_PacketBox(S_PacketBox.MSG_LEVEL_OVER, max));
						} else {
							pc.sendPackets(new S_SystemMessage("等級" + max+ "以下才可使用此道具。"));
						}
					} else {
						if (pc.isCrown() && l1iteminstance.getItem().isUseRoyal()
								|| pc.isKnight()
								&& l1iteminstance.getItem().isUseKnight()
								|| pc.isElf()
								&& l1iteminstance.getItem().isUseElf()
								|| pc.isWizard()
								&& l1iteminstance.getItem().isUseMage()
								|| pc.isDarkelf()
								&& l1iteminstance.getItem().isUseDarkelf()
								|| pc.isDragonKnight()
								&& l1iteminstance.getItem().isUseDragonknight()
								|| pc.isIllusionist()
								&& l1iteminstance.getItem().isUseIllusionist()) {UseWeapon(pc, l1iteminstance);
						} else {
							// \f1あなたのクラスではこのアイテムは使用できません。
							pc.sendPackets(new S_ServerMessage(264));
						}
					}
					return;
					/************************************  防  具  類  ***************************************************/
				} else if (l1iteminstance.getItem().getType2() == 2) { // 種別：防具

					if (pc.isCrown() && l1iteminstance.getItem().isUseRoyal()
							|| pc.isKnight()
							&& l1iteminstance.getItem().isUseKnight() || pc.isElf()
							&& l1iteminstance.getItem().isUseElf() || pc.isWizard()
							&& l1iteminstance.getItem().isUseMage()
							|| pc.isDarkelf()
							&& l1iteminstance.getItem().isUseDarkelf()
							|| pc.isDragonKnight()
							&& l1iteminstance.getItem().isUseDragonknight()
							|| pc.isIllusionist()
							&& l1iteminstance.getItem().isUseIllusionist()) {
						final int min = ((L1Armor) l1iteminstance.getItem()).getMinLevel();
						final int max = ((L1Armor) l1iteminstance.getItem()).getMaxLevel();
						if (min != 0 && min > pc.getLevel()) {
							// このアイテムは%0レベル以上にならなければ使用できません。
							//TODO 修正道具限制等級的錯誤訊息by0968026609
							pc.sendPackets(new S_SystemMessage("等級" + min+ "以上才可使用此道具。"));
						} else if (max != 0 && max < pc.getLevel()) {
							// このアイテムは%dレベル以下のみ使用できます。
							// S_ServerMessageでは引數が表示されない
							if (max < 50) {pc.sendPackets(new S_PacketBox(S_PacketBox.MSG_LEVEL_OVER, max));
							} else {
								pc.sendPackets(new S_SystemMessage("等級" + max+ "以下才可使用此道具。"));
								//TODO 修正道具限制等級的錯誤訊息by0968026609
							}
						} else {
							try {
								L1ItemDelay.onItemUse(client, l1iteminstance); // 分類道具使用延遲
							}catch (final Exception e) {
								_log.log(Level.WARNING,"分類道具使用延遲異常:"+l1iteminstance.getItemId(), e);
							}
							UseArmor(pc, l1iteminstance);
							return;
						}
					} else {
						pc.sendPackets(new S_ServerMessage(264));// \f1あなたのクラスではこのアイテムは使用できません。
					}
					return;
				}else{

					/************************************  道  具  類  ***************************************************/
					/**移除地圖類別道具*/
					/*} else if (itemId == 40383) { // 地圖：歌う島
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei035"));
					} else if (itemId == 40384) { // 地圖：隱された溪谷
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei036"));*/

					if(!pc.isGm()){
						final int item_minlvl = ((L1EtcItem) l1iteminstance.getItem()).getMinLevel();
						if (item_minlvl != 0 && item_minlvl > pc.getLevel()) {
							//TODO 修正道具限制等級的錯誤訊息by0968026609
							pc.sendPackets(new S_SystemMessage("等級" + item_minlvl+ "以上才可使用此道具。"));
							return;
						} 
						final int item_maxlvl = ((L1EtcItem) l1iteminstance.getItem()).getMaxLevel();
						if (item_maxlvl != 0 && item_maxlvl < pc.getLevel()) {
							pc.sendPackets(new S_SystemMessage("等級" + item_maxlvl+ "以下才可使用此道具。"));
							//TODO 修正道具限制等級的錯誤訊息by0968026609
							return;
						}
					}

					int delay_id = 0;
					//	if (l1iteminstance.getItem().getType2() == 0) { // 其他類型道具
					delay_id = l1iteminstance.getItem().get_delayid();
					if (delay_id != 0) { // 延遲時間設定
						if (pc.hasItemDelay(delay_id) == true) {
							return;
						}
					}
					//	}

					// 判定延遲時間
					boolean isDelayEffect = false;
					//	if (l1iteminstance.getItem().getType2() == 0) {
					final int delayEffect = ((L1EtcItem) l1iteminstance.getItem()).get_delayEffect();
					if (delayEffect > 0) {
						isDelayEffect = true;
						final Timestamp lastUsed = l1iteminstance.getLastUsed();
						if (lastUsed != null) {
							final Calendar cal = Calendar.getInstance();
							if ((cal.getTimeInMillis() - lastUsed.getTime()) / 1000 <= delayEffect) {
								// \f1何も起きませんでした。
								pc.sendPackets(new S_ServerMessage(79));
								return;
							}
						}
					}
					//	}
					// 效果ディレイがある場合は現在時間をセット
					if (isDelayEffect) {
						final Timestamp ts = new Timestamp(System.currentTimeMillis());
						l1iteminstance.setLastUsed(ts);
						pc.getInventory().updateItem(l1iteminstance,L1PcInventory.COL_DELAY_EFFECT);
						pc.getInventory().saveItem(l1iteminstance,L1PcInventory.COL_DELAY_EFFECT);
					}
					//取得道具使用類型
					//	final int usetype = l1iteminstance.getItem().getUseType();

					boolean Return = false;// opqlo 整理中---暫時使用此布林斷行跳出

					//開始搜尋使用類別
					switch(l1iteminstance.getItem().getUseType()){

					/**萬能藥水*/
					case -9:
						ElixirStats.begin(pc, l1iteminstance);
						Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						break;

						/**魔法骰子*/
					case -8:
						Dice.begin(pc, l1iteminstance);
						Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						break;

						/**魔法娃娃*/
					case -7:
						try {
							final int[] newData = {itemObjid};
							MagicDoll.begin(newData, pc, l1iteminstance);
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						} catch (final Exception e) {
							return;
						}
						break;

						/**寵物項圈*/
					case -6:
						try {
							final int[] newData = {itemObjid};
							PetCollar.begin(newData, pc, l1iteminstance);
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						} catch (final Exception e) {
							return;
						}
						break;

						/**照明類道具*/
					case -5:
						Light.begin(pc, l1iteminstance);
						Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						break;

						/**肉類(飽食度物品)*/
					case -4:
						Food.begin(pc, l1iteminstance);
						Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						break;

						/**家具類道具*/
					case -3:
						try {
							final int[] newData = {itemObjid};
							Furniture.begin(newData, pc, l1iteminstance);
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						} catch (final Exception e) {
							return;
						}
						break;
						/**恢復類道具 hpr*/
					case -2:
						if (!CheckUtil.getUseItem(pc)) {
							return;
						}
						L1BuffUtil.cancelAbsoluteBarrier(pc);
						UseHeallingPotion(l1iteminstance, pc);
						Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						break;

						/**可選擇道具 dai、zel、choice、identify */
					case 7 : case 26: case 27: case 14:
						l = readD();
						//魔法卷軸 (擬似魔法武器)、魔法卷軸 (鎧甲護持)
						if(itemId == 40870 || itemId == 40879){
							spellsc_objid = readD();
						}
						break;

						/**變形類別卷軸 sosc*/
					case 16: 
						final String cmd = this.readS(); //	s = readS();
						if(cmd == null){
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						}else{
							PolyScroll.begin(cmd, pc, l1iteminstance);
						}
						Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						break;


						/**瞬間移動卷軸相關 ntele、btele */
					case 6: case 29:
						if (!CheckUtil.getUseItemAll(pc)) {
							pc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_TELEPORT_UNLOCK, true));
							return;
						}
						final int[] newDataTE = {this.readH() , this.readD()};
						//newDataTE[0] = this.readH(); //所在地圖編號 (bmapid = readH());
						//newDataTE[1] = this.readD(); //選取目標的OBJID (btele = readD();)
						TeleportScroll.begin(newDataTE, pc, l1iteminstance);
						Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						break;

						/**空的魔法卷軸 blank */
					case 28:
						try {
							final int[] newData = {this.readC()};
							//	newData[0] = this.readC(); //blanksc_skillid = readC();
							BlankMagicScroll.begin(newData, pc, l1iteminstance);
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						} catch (final Exception e) {
							return;
						}
						break;

						/**復活卷軸 res */
					case 8:
						try {
							final int[] newData = new int[1];
							newData[0] = this.readD();//	resid = readD();
							ReactivatingScroll.begin(newData, pc, l1iteminstance);
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						} catch (final Exception e) {
							return;
						}
						break;

						/**信紙相關 letter、ccard、vcard、wcard */
					case 12: case 31: case 33: case 35:
						final int letterCode = this.readH();
						final String letterReceiver = this.readS();
						if(letterReceiver == null){
							return;
						}
						final byte[] letterText = this.readByte();
						Card.begin(letterCode, letterReceiver, letterText, pc, l1iteminstance);
						Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
						break;

						/**釣竿 fishing_rod */
					case 42:
						try{
							final int[] newData = new int[2];
							newData[0] = this.readH();//fishX = readH();
							newData[1] = this.readH();//fishY = readH();
							Fish.begin(newData, pc, l1iteminstance);
						} catch (final Exception e) {
							return;
						}
						break;

						/**魔法卷軸(狀態類) spell_buff */
					case 30:
						spellsc_objid = readD();
						break;
						/**魔杖類 spell_long、spell_short*/
					case 5: case 17:
						spellsc_objid = readD();
						spellsc_x = readH();
						spellsc_y = readH();
						break;
					default:
						l = readC();

						switch(l1iteminstance.getItem().getType()){

						case 0: //箭矢
							pc.getInventory().setArrow(l1iteminstance.getItem().getItemId());
							pc.sendPackets(new S_ServerMessage(452, l1iteminstance.getLogName()));
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
							break;
						case 15: //飛刀
							pc.getInventory().setSting(l1iteminstance.getItem().getItemId());
							pc.sendPackets(new S_ServerMessage(452,l1iteminstance.getLogName()));
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
							break;

						case 16: //箱子
							final L1TreasureBox box = L1TreasureBox.get(itemId);
							if (box != null) {
								if (pc.getInventory().checkAddItem(l1iteminstance , 10 , true)== L1PcInventory.OK 
										&& box.open(pc)) {
									final L1EtcItem temp = (L1EtcItem) l1iteminstance.getItem();
									if (temp.get_delayEffect() > 0) {
										isDelayEffect = true;
									} else {
										pc.getInventory().removeItem(l1iteminstance.getId(), 1);
									}
								}
							}
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出
							break;

						case 19: //opqlo 地圖計時系統
							final MapTimeControl timectrl =MapTimeTable.getInstance().getTimeControl(itemId);
							if(timectrl == null){
								pc.sendPackets(new S_SystemMessage("這個地圖尚未開放。"));
								pc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_TELEPORT_UNLOCK, true));
								return;
							}else if(pc.isCantTeleport()){
								pc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_TELEPORT_UNLOCK, true));
								pc.sendPackets(new S_ServerMessage(647));
								return;
							}
							timectrl.TelePort(pc, l1iteminstance);
							Return = true;// opqlo 整理中---暫時使用此布林斷行跳出

							break;
						}//其他類別迴圈結束


						break;
					}//總類別迴圈結束

					if(Return){
						try {
							L1ItemDelay.onItemUse(client, l1iteminstance); // 分類道具使用延遲
						}catch (final Exception e) {
							_log.log(Level.WARNING,"分類道具使用延遲異常:"+l1iteminstance.getItemId(), e);
						}
						return;
					} // opqlo 整理中---暫時使用此布林斷行跳出


					final L1ItemInstance l1iteminstance1 = pc.getInventory().getItem(l);
					//	_log.finest("request item use (obj) = " + itemObjid + " action = "+ l + " value = " + s);



					if ((itemId == 40576 && !pc.isElf()) // 魂の結晶の破片（白）
							|| (itemId == 40577 && !pc.isWizard()) // 魂の結晶の破片（黑）
							|| (itemId == 40578 && !pc.isKnight())) { // 魂の結晶の破片（赤）
						pc.sendPackets(new S_ServerMessage(264)); // \f1あなたのクラスではこのアイテムは使用できません。
						return;
					}

					//處罰魔杖
					if(itemId == 2401336){
						final L1Object target = L1World.getInstance().findObject(spellsc_objid);
						if (target instanceof L1PcInstance) {
							final L1PcInstance ttpc = (L1PcInstance) target;

							if(pc == ttpc){
								//								pc.setSkillEffect(Laba_START, 10);
								//
								//								刮刮樂.getInstance().startGame(pc, -1);
								pc.setX(pc.getX()+1);
								pc.sendPackets(new S_MoveCharPacket(pc));

							}else if(!ttpc.hasSkillEffect(98765432)){
								(ttpc).setSkillEffect(98765432, 1000);
							}else{
								ttpc.killSkillEffectTimer(98765432);
							}
						}else if(target instanceof L1MonsterInstance){
							pc.sendPackets(new S_SystemMessage("怪物家族編號: "+((L1MonsterInstance) target).getNpcTemplate().get_family()));
						}
					} else if(itemId == 610023){//多彩魔法結晶(召喚魔法娃娃)
						// TODO 重登刪除魔法娃娃
						try {
							if (!pc.getDollList().isEmpty()) {
								final Collection<L1DollInstance>dolList = pc.getDollList().getAllDolls();
								for (final L1DollInstance doll : dolList) {
									doll.deleteDoll();
								}
							}
						} catch (final Exception e) {
							_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
						}
						// TODO 重登刪除魔法娃娃
						boolean isuse = false;
						final ArrayList<L1ItemInstance>dollList = pc.getInventory().getAllMagicDoll(5);
						for(final L1ItemInstance doll : dollList){
							try{
								int[] data = {doll.getId() ,0};
								MagicDoll.begin(data , pc, doll );
								isuse = true;
							}catch (Exception e){
								_log.log(Level.SEVERE, e.getLocalizedMessage() , e);
							}
						}
						if(isuse){
							dollList.clear();
							pc.getInventory().removeItem(l1iteminstance , 1);
						}
					} else if(itemId == 610024){//opqlo 變性藥水
						L1World.getInstance().broadcastPacketToAll(pc, new S_SystemMessage("變性大師表示:手術很成功，但病人已死亡...找配偶的小心了。"));
						L1PolyMorph.undoPoly(pc);
						final int newgfx = 特殊列表.get().getClassId(pc.getClassId());
						pc.changeSex(newgfx);
						if(pc.get_sex() ==0){
							pc.set_sex(1);
						}else{
							pc.set_sex(0);
						}
						pc.getInventory().removeItem(l1iteminstance , 1);
						try {
							pc.save();
						} catch (final Exception e) {
							_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
						}
						pc.sendPackets(new A_ColorMessage(1, "變性成功，請重新登入遊戲來完成存檔。"));

					} else if(itemId == 610057){//火神之槌(拆解)
						if(l1iteminstance1 !=null){
							final int id = l1iteminstance1.getItemId();
							if(!DecomposeTable.get().hasTemp(id) || l1iteminstance1.getDeleteDate() !=null){
								pc.sendPackets(new S_SystemMessage("這個物品無法拆解。"));
								return;
							}else if(l1iteminstance1.getItemId() == 870085
									&& l1iteminstance1.getLevel() < 15 ){
								pc.sendPackets(new S_SystemMessage("這個物品需要 LV 15 才能拆解。"));
								return;
							}
							pc.sendPackets(new S_Message_YN(768 , l1iteminstance1.getLogName()));
							pc._DECOMPSET_ITEMID = l1iteminstance1.getId();
							pc.getInventory().removeItem(l1iteminstance, 1);
						}
					} else if(itemId == 2401337){
						final L1Object target = L1World.getInstance().findObject(spellsc_objid);
						if (target instanceof L1PcInstance) {
							final L1PcInstance ttpc = (L1PcInstance) target;
							if(ttpc.hasSkillEffect(加速器檢測)){
								ttpc.removeSkillEffect(加速器檢測);
							}
							ttpc.setSkillEffect(加速器檢測, 60000);
						}else if(target instanceof L1MonsterInstance){
							pc.sendPackets(new S_SystemMessage("怪物家族編號: "+((L1MonsterInstance) target).getNpcTemplate().get_family()));
						}
					}else if (itemId == 78055){
						if(pc.hasSkillEffect(惡魔的香水)){
							pc.sendPackets(new S_SystemMessage("技能效果還有"+pc.getSkillEffectTimeSec(惡魔的香水)+"秒。"));
							return;
						}
						L1ItemInstance point_scroll = pc.getInventory().findItemId(70308);
						if(point_scroll !=null && point_scroll.getCount() >=180){
							pc.addDroprate(0.5);
							pc.add金幣率(0.5);
							final int skillTime = Random.nextInt(1200)+600;
							pc.setSkillEffect(惡魔的香水, (skillTime*1000));//30分鐘
							pc.sendPackets(new S_SystemMessage("\\aH你向撒旦奉獻了180張積分卷，獲得掉寶、"));
							pc.sendPackets(new S_SystemMessage("\\aH金幣倍率 +50%的效果，持續"+skillTime+"秒。"));
							pc.getInventory().removeItem(point_scroll, 180);
							pc.sendPacketsX8(new S_SkillSound(pc.getId() , 422));
							pc.sendPacketsX8(new S_SkillSound(pc.getId() , 437));
						}
					} else if(itemId >=610036 && itemId <=610043){
						final int skillid = itemId-595856;
						pc.removeSkillEffect(skillid);
						pc.setSkillEffect(skillid, 15*60*1000);
						pc.getInventory().removeItem(l1iteminstance , 1);
						String msg = "";
						pc.sendPackets(new S_SkillSound(pc.getId() , 427));
						final int type = itemId-610036;
						switch(type){
						case	0	://戰鬥藥水-無種族
							msg = "無種族";
							break;
						case	1	://戰鬥藥水-不死族
							msg = "不死族";
							break;
						case	2	://戰鬥藥水-惡魔族
							msg = "惡魔族";
							break;
						case	3	://戰鬥藥水-頭目族
							msg = "頭目族";
							break;
						case	4	://戰鬥藥水-亡靈族
							msg = "亡靈族";
							break;
						case	5	://戰鬥藥水-狼族
							msg = "狼族";
							break;
						case	6	://戰鬥藥水-龍族
							msg = "龍族";
							break;
						case 7:
							pc.sendPackets(new S_SystemMessage("法術增傷上升100，持續15分。"));
							pc.addMagicDmgModfier(100);
							return;
						}
						pc.addEthncityDmg(type, 0.4);
						pc.sendPackets(new S_SystemMessage("對"+msg+"攻擊上升40%，持續15分。"));
					}else if(itemId == 610044){//銀粽子
						if(l1iteminstance.getCount() >=10){
							pc.getInventory().removeItem(l1iteminstance , 10);
							createNewItem(pc , 610045 , 1);
						}else{
							pc.sendPackets(new S_SystemMessage(l1iteminstance.getName()+" 收集滿10個可兌換金粽禮包。"));
						}
					} else if(itemId == 255550){
						L1PcInventory inv = pc.getInventory();
						L1ItemInstance item2 = inv.findItemId(70308);
						boolean isOK = l1iteminstance.getCount() >=50 && item2 !=null && item2.getCount()>=100;
						if(isOK){
							inv.removeItem(item2, 100);
							inv.removeItem(l1iteminstance , 50);
							createNewItem(pc , 255551 , 1);
						}else{
							pc.sendPackets(new S_SystemMessage("50張紅包卡、100張積分券，可以兌換一個紅包袋。"));
						}
						/**opqlo 雪球**/
					} else if (itemId == 780051){
						if(l1iteminstance1 == null){
							return;
						}
						final int l1itemid = l1iteminstance1.getItemId();
						if(l1itemid ==780062){
							pc.sendPackets(new S_ServerMessage(79));
						}else if(l1itemid>=780053 && l1itemid <=780061){
							if(pc.getDollList().getDollByItem(l1iteminstance1.getId()) !=null){
								pc.sendPackets(new S_SystemMessage("請先將 "+l1iteminstance1.getName()+" 收起來。"));
								return;
							}
							final int chance = Random.nextInt(100)+1;
							int newitemid =0;
							pc.getInventory().removeItem(l1iteminstance , 1);
							if(特殊列表.get().get雪人升級機率(l1itemid) > chance){
								newitemid = l1itemid+1;
								pc.sendPackets(new S_SystemMessage("鏘鏘!!"+l1iteminstance1.getName()+" 成長成功，等級上升。"));
							}else if(newitemid ==0){
								if(chance >90){
									if(l1itemid == 780053){
										newitemid = 0;
										pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 成長失敗。"));
									}else{
										newitemid = l1itemid-1;
										pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 拉肚子了...等級下降。"));
									}
								}else{
									newitemid = 0;
									pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 成長失敗。"));
								}
							}
							if(newitemid >0){
								pc.getInventory().removeItem(l1iteminstance1);
								createNewItem(pc,newitemid,1);
							}
						}else{
							pc.sendPackets(new S_ServerMessage(79));
						}
						/**飛龍娃娃升級卷*/
					} else if (itemId == 780107){
						if(l1iteminstance1 == null){
							return;
						}
						final int l1itemid = l1iteminstance1.getItemId();
						if(l1itemid ==780096){
							pc.sendPackets(new S_ServerMessage(79));
						}else if(l1itemid>=780087 && l1itemid <=780095){
							if(pc.getDollList().getDollByItem(l1iteminstance1.getId()) !=null){
								pc.sendPackets(new S_SystemMessage("請先將 "+l1iteminstance1.getName()+" 收起來。"));
								return;
							}
							final int chance = Random.nextInt(100)+1;
							int newitemid =0;
							pc.getInventory().removeItem(l1iteminstance , 1);
							if(特殊列表.get().get飛龍升級機率(l1itemid) > chance){
								newitemid = l1itemid+1;
								pc.sendPackets(new S_SystemMessage("鏘鏘!!"+l1iteminstance1.getName()+" 成長成功，等級上升。"));
							}else if(newitemid ==0){
								if(chance >90){
									if(l1itemid == 780087){
										newitemid = 0;
										pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 成長失敗。"));
									}else{
										newitemid = l1itemid-1;
										pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 拉肚子了...等級下降。"));
									}
								}else{
									newitemid = 0;
									pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 成長失敗。"));
								}
							}
							if(newitemid >0){
								pc.getInventory().removeItem(l1iteminstance1);
								createNewItem(pc,newitemid,1);
							}
						}else{
							pc.sendPackets(new S_ServerMessage(79));	
						}
						/**女妖娃娃升級卷*/
					} else if (itemId == 780108){
						if(l1iteminstance1 == null){
							return;
						}
						final int l1itemid = l1iteminstance1.getItemId();
						if(l1itemid ==780106){
							pc.sendPackets(new S_ServerMessage(79));
						}else if(l1itemid>=780097 && l1itemid <=780105){
							if(pc.getDollList().getDollByItem(l1iteminstance1.getId()) !=null){
								pc.sendPackets(new S_SystemMessage("請先將 "+l1iteminstance1.getName()+" 收起來。"));
								return;
							}
							final int chance = Random.nextInt(100)+1;
							int newitemid =0;
							pc.getInventory().removeItem(l1iteminstance , 1);
							if(特殊列表.get().get女妖升級機率(l1itemid) > chance){
								newitemid = l1itemid+1;
								pc.sendPackets(new S_SystemMessage("鏘鏘!!"+l1iteminstance1.getName()+" 成長成功，等級上升。"));
							}else if(newitemid ==0){
								if(chance >90){
									if(l1itemid == 780097){
										newitemid = 0;
										pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 成長失敗。"));
									}else{
										newitemid = l1itemid-1;
										pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 拉肚子了...等級下降。"));
									}
								}else{
									newitemid = 0;
									pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 成長失敗。"));
								}
							}
							if(newitemid >0){
								pc.getInventory().removeItem(l1iteminstance1);
								createNewItem(pc,newitemid,1);
							}
						}else{
							pc.sendPackets(new S_ServerMessage(79));	
						}
					} else if(itemId == 780070){//武器覺醒石{破塔}
						if(l1iteminstance1 !=null && l1iteminstance1.getItem().getType2()==1){
							final int tragetId = l1iteminstance1.getItemId();
							if(tragetId >= 673 && tragetId <= 688){
								final int nextId = 特殊列表.get().get真武器防具升級(tragetId);
								if(nextId >0){
									pc.getInventory().setEquipped(l1iteminstance1, false);
									pc.sendPackets(new S_DeleteInventoryItem(l1iteminstance1));
									l1iteminstance1.setItemId(nextId);
									final L1Item template = ItemTable.getInstance().getTemplate(l1iteminstance1.getItemId());
									l1iteminstance1.setItem(template);
									pc.getInventory().saveItem(l1iteminstance1, L1PcInventory.COL_ITEMID);
									pc.sendPackets(new S_AddItem( l1iteminstance1));//opqlo 線上更新
									pc.getInventory().removeItem(l1iteminstance, 1);
								}
							}else{
								pc.sendPackets(new S_SystemMessage("只能對破塔武器使用。"));
							}
						}else{
							pc.sendPackets(new S_SystemMessage("只能對破塔武器使用。"));
						}
					} else if(itemId == 780071){//防具覺醒石{破塔}
						if(l1iteminstance1 !=null && l1iteminstance1.getItem().getType2()==2){
							final int tragetId = l1iteminstance1.getItemId();
							if((tragetId >= 800045 && tragetId <= 800048)
									|| (tragetId >= 800050 && tragetId <= 800053)
									){
								final int nextId = 特殊列表.get().get真武器防具升級(tragetId);
								if(nextId >0){
									pc.getInventory().setEquipped(l1iteminstance1, false);
									pc.sendPackets(new S_DeleteInventoryItem(l1iteminstance1));
									l1iteminstance1.setItemId(nextId);
									final L1Item template = ItemTable.getInstance().getTemplate(l1iteminstance1.getItemId());
									l1iteminstance1.setItem(template);
									pc.getInventory().saveItem(l1iteminstance1, L1PcInventory.COL_ITEMID);
									pc.sendPackets(new S_AddItem( l1iteminstance1));//opqlo 線上更新
									pc.getInventory().removeItem(l1iteminstance, 1);
								}
							}else{
								pc.sendPackets(new S_SystemMessage("只能對破塔防具使用。"));
							}
						}else{
							pc.sendPackets(new S_SystemMessage("只能對破塔防具使用。"));
						}
					} else if(itemId == 780109){//武器覺醒石{殞鳳}
						if(l1iteminstance1 !=null && l1iteminstance1.getItem().getType2()==1){
							final int tragetId = l1iteminstance1.getItemId();
							if(tragetId >= 697 && tragetId <= 712){
								final int nextId = 特殊列表.get().get真武器防具升級(tragetId);
								if(nextId >0){
									pc.getInventory().setEquipped(l1iteminstance1, false);
									pc.sendPackets(new S_DeleteInventoryItem(l1iteminstance1));
									l1iteminstance1.setItemId(nextId);
									final L1Item template = ItemTable.getInstance().getTemplate(l1iteminstance1.getItemId());
									l1iteminstance1.setItem(template);
									pc.getInventory().saveItem(l1iteminstance1, L1PcInventory.COL_ITEMID);
									pc.sendPackets(new S_AddItem( l1iteminstance1));//opqlo 線上更新
									pc.getInventory().removeItem(l1iteminstance, 1);
								}
							}else{
								pc.sendPackets(new S_SystemMessage("只能對殞鳳武器使用。"));
							}
						}else{
							pc.sendPackets(new S_SystemMessage("只能對殞鳳武器使用。"));
						}
					} else if(itemId == 780110){//防具覺醒石{殞鳳}
						if(l1iteminstance1 !=null && l1iteminstance1.getItem().getType2()==2){
							final int tragetId = l1iteminstance1.getItemId();
							if((tragetId >= 870079 && tragetId <= 870082)
									|| (tragetId >= 870087 && tragetId <= 870090)
									){
								final int nextId = 特殊列表.get().get真武器防具升級(tragetId);
								if(nextId >0){
									pc.getInventory().setEquipped(l1iteminstance1, false);
									pc.sendPackets(new S_DeleteInventoryItem(l1iteminstance1));
									l1iteminstance1.setItemId(nextId);
									final L1Item template = ItemTable.getInstance().getTemplate(l1iteminstance1.getItemId());
									l1iteminstance1.setItem(template);
									pc.getInventory().saveItem(l1iteminstance1, L1PcInventory.COL_ITEMID);
									pc.sendPackets(new S_AddItem( l1iteminstance1));//opqlo 線上更新
									pc.getInventory().removeItem(l1iteminstance, 1);
								}
							}else{
								pc.sendPackets(new S_SystemMessage("只能對殞鳳防具使用。"));
							}
						}else{
							pc.sendPackets(new S_SystemMessage("只能對殞鳳防具使用。"));
						}
					} else if (itemId == 255542){// opqlo 主城傳送符
						if(pc.isInHell()){
							pc.sendPackets(new S_ServerMessage(647));
							return;
						}else if (pc.isCantTeleport()){
							pc.sendPackets(new S_ServerMessage(647));
							return;
						}
						final int[] Rloc = loc[Random.nextInt(loc.length)];
						L1Teleport.teleport(pc, (Random.nextInt(Rloc[0])+Rloc[1]),(Random.nextInt(Rloc[2])+Rloc[3]), (short)1784 ,5 , true);
						// 元寶袋
					} else if (itemId == 610001 || itemId ==610002
							|| itemId == 610003 || itemId == 610004){
						int MinCount = 0 , MaxCount =0;
						switch(itemId){
						case 610001://小型元寶袋
							MinCount =5;
							MaxCount =45;
							break;
						case 610002://普通元寶袋
							MinCount =5;
							MaxCount =95;
							break;
						case 610003://大型元寶袋
							MinCount =5;
							MaxCount =295;
							break;
						case 610004://豪華元寶袋
							MinCount =30;
							MaxCount =370;
							break;
						}
						if(MaxCount <=0){
							return;
						}
						final L1ItemInstance item = ItemTable.getInstance().createItem(90308);
						if(pc.getInventory().checkAddItem(item, MaxCount)==0){
							int count = Math.min(Random.nextInt(MaxCount)+1, Random.nextInt(MaxCount)+1);
							if(Random.nextBoolean()){
								count /=2;
							}
							item.setCount(count+MinCount);
							pc.getInventory().removeItem(l1iteminstance, 1);
							pc.getInventory().storeItem(item);
							pc.sendPackets(new S_ServerMessage(403, item.getLogName())); // %0を手に入れました。
							final StringBuilder log = new StringBuilder();
							log.append(pc.getNetConnection().getIp().toString()).append(" IP 玩家:").append(pc.getName()).append("	(").append(pc.getAccountName()).append(")	開啟:")
							.append(l1iteminstance.getLogName()).append("	獲得 商城元寶:").append(item.getCount()).append(" 個，時間:(").append(new Timestamp(System.currentTimeMillis())).append(")。");
							各項記錄輸出.LogSave(32, log.toString());
						}
					}else if(itemId == 780068){//死幽谷書冊
						if(!pc.isGm() && pc.get_metempsychosis() <120){
							pc.sendPackets(new S_SystemMessage("需要至少120轉才可使用此道具。"));
							return;
						}
						final L1PcInventory inv = pc.getInventory();
						if(inv.findItemId(780069) !=null){//身上還有死幽谷卷軸
							pc.sendPackets(new S_SystemMessage("背包中存在相同的道具。"));
							return;
						}
						final L1ItemInstance item = createNewItem(pc , 780069 , 1);
						final Timestamp delDay = new Timestamp(System.currentTimeMillis()+ 10805000);// 3H
						//						final Timestamp delDay = new Timestamp(System.currentTimeMillis()+ 650000);// 3H
						item.setDeleteDate(delDay);
						item.setIdentified(true);
						inv.removeItem(l1iteminstance, 1);	
						inv.updateItem(item,L1PcInventory.COL_IS_ID);
						inv.saveItem(item,L1PcInventory.COL_IS_ID);

					}else if(itemId == 780069){//死幽谷卷軸
						if(l1iteminstance.getDeleteDate() == null){
							pc.sendPackets(new S_SystemMessage("道具期限已過期。"));
							return;
						}
						if(pc.isCantTeleport()){
							pc.sendPackets(new S_ServerMessage(647));
							return;
						}
						final Calendar cal = Calendar.getInstance();
						long time = l1iteminstance.getDeleteDate().getTime();
						final long checkDeleteDate = time - cal.getTimeInMillis();
						if(checkDeleteDate <=60000){
							pc.sendPackets(new S_SystemMessage("剩餘時間不足，無法使用。"));
							return;
						}
						pc.sendPackets(new S_SystemMessage("你可以在這停留 [" + checkDeleteDate/1000 + "] 秒。"));
						pc.killSkillEffectTimer(MapTimer);
						pc.setSkillEffect(MapTimer, (int) checkDeleteDate);
						L1Teleport.teleportMagic(pc, 32885, 32915, (short) 9926, 5, true, 2);

						if(checkDeleteDate <= 600000){
							pc.sendPackets(new S_SystemMessage(l1iteminstance.getName()+" 效果微弱，使用後燃燒成灰燼。"));
							pc.getInventory().removeItem(l1iteminstance, 1);
						}

					}else if(itemId == 610005
							||itemId == 610006
							||itemId == 610007){
						final int sec = pc.getSkillEffectTimeSec(人參雞湯)+pc.getSkillEffectTimeSec(烏骨雞湯)+pc.getSkillEffectTimeSec(蒜頭雞湯);
						if(sec >0){
							pc.sendPackets(new S_SystemMessage("雞湯效果剩餘時間還有:"+sec+"秒"));
							return;
						}
						final int skillid = itemId - 595834;
						pc.setSkillEffect(skillid, 15*60*1000);
						if(itemId == 610005){
							pc.sendPackets(new S_SystemMessage("體魄更為強健，全部攻擊力上升 15%。"));
							pc.sendPackets(new S_SkillSound(pc.getId() , 2425));
						}else if(itemId == 610006){
							pc.sendPackets(new S_SystemMessage("身體更為硬朗，全部防禦力上升 15%。"));
							pc.sendPackets(new S_SkillSound(pc.getId() , 2426));
						}else if(itemId == 610007){
							pc.sendPackets(new S_SystemMessage("氣血更為流暢，HP、MP上升 30%。"));
							pc.sendPackets(new S_SkillSound(pc.getId() , 2427));
							pc.setExtraHp((int) (pc.getBaseMaxHp() *0.3));
							pc.setExtraMp((int) (pc.getBaseMaxMp() *0.3));
							pc.addMaxHp(pc.getExtraHp());
							pc.addMaxMp(pc.getExtraMp());
							pc.setCurrentHp(pc.getCurrentHp()-1);
							if (pc.isInParty()) { // パーティー中
								pc.getParty().updateMiniHP(pc);
							}
							pc.sendPackets(new S_MPUpdate(pc.getCurrentMp(), pc.getMaxMp()));
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40126 || itemId == 40098) { // 鑑定卷軸
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						final int l1itemid = l1iteminstance1.getItemId();
						if (!l1iteminstance1.isIdentified()) {
							l1iteminstance1.setIdentified(true);
							pc.getInventory().updateItem(l1iteminstance1,L1PcInventory.COL_IS_ID);
							pc.getInventory().saveItem(l1iteminstance1,L1PcInventory.COL_IS_ID);
							final ItemLevelUp LevelUp = ItemLevelUpTable.getInstance().getTemplate(l1itemid); //隨機等級用
							if(LevelUp !=null
									&& ((l1itemid == 810059
									|| l1itemid == 810060
									|| l1itemid == 810061) || (l1itemid>=810008 && l1itemid <=810024)) ){
								if(pc.getInventory().checkEquipped(l1itemid)){
									pc.getInventory().setEquipped(l1iteminstance1, false);
								}
								if(l1itemid == 810059
										|| l1itemid == 810060
										|| l1itemid == 810061
										){
									final int chance1 =Random.nextInt(150)+1;
									final int chance2 =Random.nextInt(50)+1;
									int UpRate = 25 ;
									if(chance1 == chance2){
										UpRate = 100;
									}else if(chance1 <=chance2){
										UpRate = 60;
									}else if(chance1 - chance2 >= 60){
										UpRate = 40;
									}
									l1iteminstance1.setLevel(Random.nextInt(UpRate)+1);

								}else if(l1itemid>=810008 && l1itemid <=810024){
									final int maxlv = LevelUp.getMaxLevel();

									if(Random.nextInt(100)+1 >=80){
										l1iteminstance1.setLevel(Random.nextInt(maxlv)+1);
									}else{
										l1iteminstance1.setLevel(Random.nextInt(maxlv/2)+1);	
									}
								}
								if(l1iteminstance1.getLevel() >1){
									ItemLevelUpTable.getInstance().getLevelStatus(l1iteminstance1);
									pc.sendPackets(new S_ItemStatus(l1iteminstance1));//opqlo 線上更新
								}
								pc.getInventory().updateItem(l1iteminstance1,L1PcInventory.COL_LEVEL);
								pc.getInventory().saveItem(l1iteminstance1,L1PcInventory.COL_LEVEL);
								StringBuilder name = new StringBuilder(32);
								name.append("IP:(").append(pc.getNetConnection().getIp().toString()).append(")	").append(pc.getName())
								.append("	鑑定成功【").append(l1iteminstance1.getViewName()).append("】	流水號:").append(l1iteminstance1.getId()).append("	時間:")
								.append(new Timestamp(System.currentTimeMillis()));
								各項記錄輸出.LogSave(20, name.toString());
								name.delete(0, name.length());
								name = null;
							}else{
								final L1IdStatus status =IdentifiedTable.getInstance().getIdentified(l1itemid);
								if(status != null){
									if(pc.getInventory().checkEquipped(l1itemid)){
										pc.getInventory().setEquipped(l1iteminstance1, false);
									}
									int statusCount = status.getStatusCount();
									final int[]allStatus = status.getTotalType();
									if((int)(status.getChance()*Config.IDENTIFIED_RATE)>=(Random.nextInt(100)+1)){
										if(status.isRandom() == false ){
											for(int i =0; i < allStatus.length; i++){
												final int[] value = status.getStatusValue(allStatus[i]);
												IdentifiedTable.getInstance().getIdStatus(allStatus[i]).setStatus(pc, l1iteminstance1, value[0], value[1]);
											}
										}else{
											final Set<Integer>repeat = new HashSet<Integer>();
											while(statusCount >0 ){
												final int type = Random.nextInt(allStatus.length);
												if(repeat.add(allStatus[type])){
													final int[] value = status.getStatusValue(allStatus[type]);
													IdentifiedTable.getInstance().getIdStatus(allStatus[type]).setStatus(pc, l1iteminstance1, value[0], value[1]);
													statusCount--;
												}
											}
										}
									}
									StringBuilder name = new StringBuilder(32);
									name.append("IP:(").append(pc.getNetConnection().getIp().toString()).append(")	").append(pc.getName())
									.append("	鑑定成功【").append(l1iteminstance1.getViewName()).append("】	流水號:").append(l1iteminstance1.getId()).append("	時間:")
									.append(new Timestamp(System.currentTimeMillis()));
									各項記錄輸出.LogSave(20, name.toString());
									name.delete(0, name.length());
									name = null;
								}
							}
							//	IdClass.get().getClass(1).setStatus(pc, l1iteminstance1, 100, 500);
						}
						pc.sendPackets(new S_IdentifyDesc(l1iteminstance1));
						pc.getInventory().removeItem(l1iteminstance, 1);
						if(pc.isGm()){
							pc.sendPackets(new S_SystemMessage("道具編號: "+l1itemid));
						}
					}else if(itemId >=610058 && itemId <= 610061){//瓶裝城堡技能
						if(pc.getClan() == null){
							pc.sendPackets(new S_SystemMessage("\\aH你沒有血盟。"));
							return;
						}
						final int pcCastleId = pc.getClan().getCastleId();
						final L1Castle castle = CastleTable.getInstance().getCastleTable(pcCastleId);
						if(pcCastleId ==0 || castle == null){
							pc.sendPackets(new S_SystemMessage("\\aH你的血盟沒有擁有城堡。"));
							return;
						}else if(ServerWarExecutor.get().isNowWar(pcCastleId)){
							pc.sendPackets(new S_SystemMessage("\\aH攻城戰中，無法使用此功能。"));
							return;
						}
						final byte type = (byte) (itemId - 610057);
						if(type <=0 || type >4){
							return;
						}
						if(!castle.checkSkillLv(type)){
							pc.getInventory().removeItem(l1iteminstance, 1);
							castle.useCastleSkill(type, pc, null , 3600);
						}else{
							pc.sendPackets(new S_SystemMessage("\\aH尚未學習這個技能。"));
						}

					}else if(itemId == 78052 || itemId == 78053
							|| itemId == 78056 || itemId == 78057){
						boolean Returns = false;
						final L1Inventory inv = pc.getInventory();
						L1ItemInstance box1 ,box2 ,key;
						int newitemId =0;
						if(itemId == 78052 || itemId == 78053){
							box1 = inv.findItemId(78052);//逆戰套裝箱(上)
							box2 = inv.findItemId(78053);//逆戰套裝箱(下)
							if(box1 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("逆戰套裝箱(上) 數量不足。"));
							}
							if(box2 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("逆戰套裝箱(下) 數量不足。"));
							}
							newitemId = 78051;
						}else{
							box1 = inv.findItemId(78056);//逆戰武器箱(上)
							box2 = inv.findItemId(78057);//逆戰武器箱(下)
							if(box1 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("逆戰武器箱(上) 數量不足。"));
							}
							if(box2 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("逆戰武器箱(下) 數量不足。"));
							}
							newitemId = 78058;
						}
						key = inv.findItemId(78054);//逆戰之核
						if(key == null ){
							Returns = true;
							pc.sendPackets(new S_SystemMessage("逆戰之核(10) 數量不足。"));
						}else if(key.getCount() <10){
							Returns = true;
							pc.sendPackets(new S_SystemMessage("逆戰之核("+(10-key.getCount())+") 數量不足。"));
						}
						if(Returns){
							return;
						}
						if(createNewItem(pc , newitemId , 1) !=null){
							inv.removeItem(box1 , 1);
							inv.removeItem(box2 , 1);
							inv.removeItem(key , 10);
						}else{
							pc.sendPackets(new S_SystemMessage("身上空位不足。"));
						}
					}else if(itemId == 610017 || itemId == 610018
							|| itemId == 610020 || itemId == 610021){
						boolean Returns = false;
						final L1Inventory inv = pc.getInventory();
						L1ItemInstance box1 ,box2 ,key;
						int newitemId =0;
						if(itemId == 610017 || itemId == 610018){
							box1 = inv.findItemId(610017);//破塔套裝箱(上)
							box2 = inv.findItemId(610018);//破塔套裝箱(下)
							if(box1 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("破塔套裝箱(上) 數量不足。"));
							}
							if(box2 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("破塔套裝箱(下) 數量不足。"));
							}
							newitemId = 610016;
						}else{
							box1 = inv.findItemId(610020);//破塔武器箱(上)
							box2 = inv.findItemId(610021);//破塔武器箱(下)
							if(box1 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("破塔武器箱(上) 數量不足。"));
							}
							if(box2 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("破塔武器箱(下) 數量不足。"));
							}
							newitemId = 610022;
						}
						key = inv.findItemId(610019);//破塔之核
						if(key == null ){
							Returns = true;
							pc.sendPackets(new S_SystemMessage("破塔之核(10) 數量不足。"));
						}else if(key.getCount() <10){
							Returns = true;
							pc.sendPackets(new S_SystemMessage("破塔之核("+(10-key.getCount())+") 數量不足。"));
						}
						if(Returns){
							return;
						}
						if(createNewItem(pc , newitemId , 1) !=null){
							inv.removeItem(box1 , 1);
							inv.removeItem(box2 , 1);
							inv.removeItem(key , 10);
						}else{
							pc.sendPackets(new S_SystemMessage("身上空位不足。"));
						}
					}else if(itemId == 610065 || itemId == 610066
							|| itemId == 610068 || itemId == 610069){
						boolean Returns = false;
						final L1Inventory inv = pc.getInventory();
						L1ItemInstance box1 ,box2 ,key;
						int newitemId =0;
						if(itemId == 610065 || itemId == 610066){
							box1 = inv.findItemId(610065);//殞鳳套裝箱(上)
							box2 = inv.findItemId(610066);//殞鳳套裝箱(下)
							if(box1 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("殞鳳套裝箱(上) 數量不足。"));
							}
							if(box2 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("殞鳳套裝箱(下) 數量不足。"));
							}
							newitemId = 610064;
						}else{
							box1 = inv.findItemId(610068);//殞鳳武器箱(上)
							box2 = inv.findItemId(610069);//殞鳳武器箱(下)
							if(box1 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("殞鳳武器箱(上) 數量不足。"));
							}
							if(box2 == null){
								Returns = true;
								pc.sendPackets(new S_SystemMessage("殞鳳武器箱(下) 數量不足。"));
							}
							newitemId = 610070;
						}
						key = inv.findItemId(610067);//殞鳳之核
						if(key == null ){
							Returns = true;
							pc.sendPackets(new S_SystemMessage("殞鳳之核(10) 數量不足。"));
						}else if(key.getCount() <10){
							Returns = true;
							pc.sendPackets(new S_SystemMessage("殞鳳之核("+(10-key.getCount())+") 數量不足。"));
						}
						if(Returns){
							return;
						}
						if(createNewItem(pc , newitemId , 1) !=null){
							inv.removeItem(box1 , 1);
							inv.removeItem(box2 , 1);
							inv.removeItem(key , 10);
						}else{
							pc.sendPackets(new S_SystemMessage("身上空位不足。"));
						}
					}else if(itemId ==780048 || itemId == 780067){ //鑑定還原
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						if(!l1iteminstance1.isIdentified()){
							pc.sendPackets(new S_SystemMessage("你想要幹嘛?"));
							return;
						}
						final int l1itemid = l1iteminstance1.getItemId();
						boolean canUse = false;
						if(IdentifiedTable.getInstance().getIdentified(l1itemid) !=null){
							if(pc.getInventory().checkEquipped(l1itemid)){
								pc.getInventory().setEquipped(l1iteminstance1, false);
							}
							final L1IdStatus status =IdentifiedTable.getInstance().getIdentified(l1itemid);
							if(status.canRestore()){
								final int[]allStatus = status.getTotalType();
								for(int type=0; type<allStatus.length; type++){
									IdentifiedModel model = IdentifiedTable.getInstance().getIdStatus(allStatus[type]);
									if(model !=null){
										model.setStatus(pc, l1iteminstance1, 0, 0);
									}
								}
								canUse = true;
							}
						}else if(ItemLevelUpTable.getInstance().getTemplate(l1itemid) !=null){
							if(pc.getInventory().checkEquipped(l1itemid)){
								pc.getInventory().setEquipped(l1iteminstance1, false);
							}
							final int lastLevel = l1iteminstance1.getLevel();
							if(l1itemid == 810059
									|| l1itemid == 810060
									|| l1itemid == 810061
									){
								l1iteminstance1.setLevel(1);
								canUse = true;

							}else if(l1itemid>=810008 && l1itemid <=810024){
								l1iteminstance1.setLevel(1);
								canUse = true;
							}
							if(lastLevel >1){
								ItemLevelUpTable.getInstance().getLevelStatus(l1iteminstance1);
								pc.sendPackets(new S_ItemStatus(l1iteminstance1));//opqlo 線上更新
							}
							pc.getInventory().updateItem(l1iteminstance1,L1PcInventory.COL_LEVEL);
							pc.getInventory().saveItem(l1iteminstance1,L1PcInventory.COL_LEVEL);
						}
						if(canUse){
							l1iteminstance1.setIdentified(false);
							pc.getInventory().updateItem(l1iteminstance1,L1PcInventory.COL_IS_ID);
							pc.getInventory().saveItem(l1iteminstance1,L1PcInventory.COL_IS_ID);
							pc.getInventory().removeItem(l1iteminstance, 1);
							pc.sendPackets(new S_ItemStatus(l1iteminstance1));
						}else{
							pc.sendPackets(new S_SystemMessage("你想要幹嘛?"));
						}
					}else if(itemId == 780111){
						final int l1itemid = l1iteminstance1.getItemId();
						if(l1itemid >=870095 && l1itemid <=870097){
							final ItemLevelUp temp =ItemLevelUpTable.getInstance().getTemplate(l1itemid);
							if(temp !=null){
								if(pc.getInventory().checkEquipped(l1itemid)){
									pc.getInventory().setEquipped(l1iteminstance1, false);
								}
								final int level =l1iteminstance1.getLevel(); 
								if(level <temp.getMaxLevel()){
									final int rate ;
									if(level <=10){
										rate = 80;
									}else if(level <=30){
										rate = 50;
									}else if(level <=50){
										rate = 25;
									}else if(level <=90){
										rate = 15;
									}else{
										rate = 10;
									}
									boolean isOK =false;
									if(rate >= Random.nextInt(100)+1){
										isOK = true;
										l1iteminstance1.setLevel(level+1);
										pc.sendPackets(new S_SystemMessage(l1iteminstance1.getLogName()+" 升級成功!!!"));
									}else{
										if(Random.nextInt(100)+1 >90){
											isOK = true;
											l1iteminstance1.setLevel(level-1);
											pc.sendPackets(new S_SystemMessage(l1iteminstance1.getLogName()+" 升級失敗，等級下降。"));
										}else{
											pc.sendPackets(new S_SystemMessage(l1iteminstance1.getLogName()+" 升級失敗。"));
										}
									}
									if(isOK){
										ItemLevelUpTable.getInstance().getLevelStatus(l1iteminstance1);
										pc.sendPackets(new S_ItemStatus(l1iteminstance1));//opqlo 線上更新
										pc.getInventory().updateItem(l1iteminstance1,L1PcInventory.COL_LEVEL);
										pc.getInventory().saveItem(l1iteminstance1,L1PcInventory.COL_LEVEL);
									}
									pc.getInventory().removeItem(l1iteminstance, 1);
								}else{
									pc.sendPackets(new S_SystemMessage(l1iteminstance1.getLogName()+" 已達最高等級，無法升級。"));
								}
							}
						}else{
							pc.sendPackets(new S_SystemMessage("只能對「幽冥、射日、戰神斗篷 使用。」"));
						}
					}else if(itemId == 780046){ // 武器用
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						if(l1iteminstance1.getItem().getType2()==1
								&&l1iteminstance1.getDeleteDate()==null
								&&l1iteminstance1.getItem().isTradable()){
							if(l1iteminstance.getChargeCount()==0){
								final int enchantLv = l1iteminstance1.getEnchantLevel();
								if(enchantLv >0){
									if(pc.getInventory().checkEquipped(l1iteminstance1.getItemId())){
										pc.getInventory().setEquipped(l1iteminstance1, false);
									}
									if(l1iteminstance.isIdentified() == false){
										l1iteminstance.setIdentified(true);
									}
									final L1PcInventory inv = pc.getInventory();
									l1iteminstance1.setEnchantLevel(0);
									inv.updateItem(l1iteminstance1, L1PcInventory.COL_ENCHANTLVL);
									inv.saveItem(l1iteminstance1, L1PcInventory.COL_ENCHANTLVL);
									l1iteminstance.setChargeCount(enchantLv);
									pc.sendPackets(new S_ItemName(l1iteminstance));
									pc.sendPackets(new S_ItemStatus(l1iteminstance));//opqlo 線上更新
									inv.saveItem(l1iteminstance, L1PcInventory.COL_CHARGE_COUNT);
									pc.sendPackets(new S_SystemMessage("成功將武器強化值轉移到卷軸上。"));
								}else{
									pc.sendPackets(new S_ServerMessage(79));
								}
							}else{
								final L1PcInventory inv = pc.getInventory();
								inv.remove轉移卷軸();
								inv.set轉移卷軸(l1iteminstance, l1iteminstance1);
								pc.sendPackets(new S_Message_YN(768 , l1iteminstance1.getLogName()));
							}
						}else{
							pc.sendPackets(new S_ServerMessage(79));
						}
					}else if(itemId == 780047){ // 防具用
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						if(l1iteminstance1.getItem().getType2()==2
								&&l1iteminstance1.getDeleteDate()==null
								&&l1iteminstance1.getItem().isTradable()){
							if(l1iteminstance.getChargeCount()==0){
								final int enchantLv = l1iteminstance1.getEnchantLevel();
								if(enchantLv >0){
									if(pc.getInventory().checkEquipped(l1iteminstance1.getItemId())){
										pc.getInventory().setEquipped(l1iteminstance1, false);
									}
									if(l1iteminstance.isIdentified() == false){
										l1iteminstance.setIdentified(true);
									}
									final L1PcInventory inv = pc.getInventory();
									l1iteminstance1.setEnchantLevel(0);
									inv.updateItem(l1iteminstance1, L1PcInventory.COL_ENCHANTLVL);
									inv.saveItem(l1iteminstance1, L1PcInventory.COL_ENCHANTLVL);
									l1iteminstance.setChargeCount(enchantLv);
									pc.sendPackets(new S_ItemName(l1iteminstance));
									pc.sendPackets(new S_ItemStatus(l1iteminstance));//opqlo 線上更新
									inv.saveItem(l1iteminstance, L1PcInventory.COL_CHARGE_COUNT);
									pc.sendPackets(new S_SystemMessage("成功將防具強化值轉移到卷軸上。"));
								}else{
									pc.sendPackets(new S_ServerMessage(79));
								}
							}else{
								if(l1iteminstance1.getItem().get_safeenchant()<0 || l1iteminstance1.getItem().getBless()>=128){
									pc.sendPackets(new S_SystemMessage("這是無法強化的防具。"));
									return;
								}
								final L1PcInventory inv = pc.getInventory();
								inv.remove轉移卷軸();
								inv.set轉移卷軸(l1iteminstance, l1iteminstance1);
								pc.sendPackets(new S_Message_YN(768 , l1iteminstance1.getLogName()));
							}
						}else{
							pc.sendPackets(new S_ServerMessage(79));
						}
					}else if(itemId == 610062){//強力棒槌 打地鼠
						//						System.out.println("spellsc_objid: "+spellsc_objid+" x: "+spellsc_x+" y: "+spellsc_y);
						if(spellsc_objid >0){
							final L1Object obj =L1World.getInstance().findObject(spellsc_objid);
							if(obj instanceof L1HummerInstance){
								final L1HummerInstance npc = (L1HummerInstance)obj;
								if(npc.check(itemObjid)){
									pc.sendPacketsAll(new S_DoActionGFX(spellsc_objid , ActionCodes.ACTION_Damage));
									//							npc.broadcastPacketX8(new S_SkillSound(spellsc_objid , 227));
									pc.sendPacketsAll(new S_RemoveObject(npc));// 移除顯示
									pc.sendPacketsAll(new S_EffectLocation(spellsc_x , spellsc_y , 227));
									return;
								}
							}
						}
						pc.sendPacketsAll(new S_EffectLocation(spellsc_x , spellsc_y , 439));
					}else if(itemId == 97100001){
						pc.addSp(1);
						pc.sendPackets(new S_SPMR(pc));
					}else if(itemId == 97100002){
						pc.addSp(-1);
						pc.sendPackets(new S_SPMR(pc));
					}else if(itemId == 77072025){
//						TreasureMaster.getInstance().TreasureBegin(pc, 1, true, itemId);
						if(!RobotThread.LIST.contains(pc)){
							pc.setRobotTemp(new RobotTemp(pc , 59));
						RobotThread.LIST.add(pc);
						}else{
							RobotThread.LIST.remove(pc);
						}
					}else if(itemId == 77072026){//opqlo 通關道具
						//						TreasureMaster.getInstance().BOSS(pc.getMapId());
						FireRoomThread.get().spawnBoss(pc.getMapId());
						pc.getInventory().removeItem(l1iteminstance);
					}else if(itemId == 77072027){//opqlo 冰晶鑰匙
						//	new NewLaBa().NewLaBaStart(pc);
						TreasureMaster.getInstance().TreasureBegin(pc, 2, true , itemId);

					}else if(itemId == 77072028){//冰晶淚珠

						if(l1iteminstance.getCount() <10){
							pc.sendPackets(new S_SystemMessage("收集[10個]+[ 3億金幣]，可合成【冰晶鑰匙】"));
							return;
						}
						final L1PcInventory inv = pc.getInventory();
						final L1ItemInstance item = inv.findItemId(40308);

						if(item == null || item.getCount() <300000000){
							pc.sendPackets(new S_SystemMessage("身上金幣不足 [ 3億 ]。"));
							return;
						}
						if(createNewItem(pc, 77072027, 1) !=null){
							inv.removeItem(item, 300000000);
							inv.removeItem(l1iteminstance, 10);
							L1World.getInstance().broadcastPacketToAll(pc , new S_SystemMessage("\\f3玩家:"+pc.getName()+" 合成了【冰晶鑰匙】。"));
						}

					}else if (itemId == 780031){//冰晶耳環

						if(l1iteminstance.getCount() <2000){
							pc.sendPackets(new S_SystemMessage("收集[2000個]，可合成【冰晶耳環】"));
							return;
						}

						if(createNewItem(pc, 810076, 1) !=null){
							pc.getInventory().removeItem(l1iteminstance, 2000);
							L1World.getInstance().broadcastPacketToAll(new S_SystemMessage("\\f3恭喜玩家:"+pc.getName()+" 合成了【冰晶耳環】。"));
						}

					}else if (itemId == 780022){//聖獸擺飾
						boolean isAppear = true;
						L1FurnitureInstance furniture = null;
						for (final L1Object l1object : L1World.getInstance().getObject()) {
							if (l1object instanceof L1FurnitureInstance) {
								furniture = (L1FurnitureInstance) l1object;
								if (furniture.getItemObjId() == itemObjid) { // 既に引き出している傢俱
									isAppear = false;
									break;
								}
							}
						}
						if (isAppear) {
							try {
								final L1Npc l1npc = NpcTable.getInstance().getTemplate(80114);
								if (l1npc != null) {
									//	Object obj = null;
									try {
										final String ss = l1npc.getImpl();
										final Constructor<?> constructor = Class.forName("l1j.server.server.model.Instance." + ss+ "Instance").getConstructors()[0];
										final Object aobj[] = { l1npc };
										final short mapid = pc.getMapId();
										int x = 0, y =0;
										switch(pc.getHeading()){
										case 0: 
											x = pc.getX();
											y = pc.getY()-1;
											break;
										case 1:
											x=pc.getX()+1;
											y=pc.getY()-1;
											break;
										case 2:
											x=pc.getX()+1;
											y=pc.getY();
											break;
										case 3:
											x=pc.getX()+1;
											y=pc.getY()+1;
											break;
										case 4:
											x=pc.getX();
											y=pc.getY()+1;
											break;
										case 5:
											x=pc.getX()-1;
											y=pc.getY()+1;
											break;
										case 6:
											x = pc.getX()-1;
											y = pc.getY();
											break;
										case 7:
											x = pc.getX()-1;
											y = pc.getY()-1;
											break;
										}
										/**opqlo未完成 無法擺放*/
										final int BossCount = TreasureMaster.getInstance().getIceCaveBoss(mapid);
										if(BossCount !=-1){

											if(x>=32747 && x<=32748 && y >=32853 && y<=32854){
												if(BossCount ==1 ||BossCount ==3){
													pc.sendPackets(new S_SystemMessage("這個機關已經開啟，無法再放置擺飾。"));
													return;
												}
												pc.getInventory().removeItem(l1iteminstance);
												TreasureMaster.getInstance().IceCave(mapid, 1);

											}else if(x>=32741 && x<=32742 && y>=32812 && y<=32813){
												if(BossCount ==2 ||BossCount ==3){
													pc.sendPackets(new S_SystemMessage("這個機關已經開啟，無法再放置擺飾。"));
													return;
												}
												pc.getInventory().removeItem(l1iteminstance);
												TreasureMaster.getInstance().IceCave(mapid, 2);
											}else if(x>=32742 && x<=32745 && y>=32831 && y<=32834){
												if(BossCount !=3){
													pc.sendPackets(new S_SystemMessage("必須先啟動其他兩個機關。"));
													return;
												}
												pc.getInventory().removeItem(l1iteminstance);
												TreasureMaster.getInstance().IceCave(mapid, 3);
											}
										}

										furniture = (L1FurnitureInstance) constructor.newInstance(aobj);
										furniture.setId(IdFactory.getInstance().nextId());
										furniture.setMap(mapid);
										furniture.setX(x);
										furniture.setY(y);
										furniture.setHomeX(x);
										furniture.setHomeY(y);
										furniture.setHeading(0);
										furniture.setItemObjId(itemObjid);

										L1World.getInstance().storeObject(furniture);
										L1World.getInstance().addVisibleObject(furniture);
										//FurnitureSpawnTable.getInstance().insertFurniture(furniture);
									} catch (Exception e) {
										_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
									}
								}
							} catch (Exception exception) {
							}
						} else {
							furniture.deleteMe();
							FurnitureSpawnTable.getInstance().deleteFurniture(furniture);
						}
					}else if(itemId == 780017){//opqlo 贖罪聖書
						final int lawful = pc.getLawful();
						if(lawful==32767){
							pc.sendPackets(new S_SystemMessage("正義值已達最大值。"));
						}else{
							pc.getInventory().removeItem(l1iteminstance,1);
							pc.setLawful(32767);
							pc.sendPackets(new S_SystemMessage("贖罪後正義值上升了。"));
						}
					}else if(itemId ==780019){ //\f2邪惡卷軸 opqlo 05/06 改為 吸怪臭藥水
						if(pc.hasSkillEffect(ATTRACT_MONSTER)){
							pc.removeSkillEffect(ATTRACT_MONSTER);
							return;
						}
						pc.setSkillEffect(ATTRACT_MONSTER, 3600000);
						pc.sendPackets(new S_SystemMessage("\\aD散發出特殊氣味，吸引怪物追打60分鐘。"));
						pc.sendPacketsX8(new S_Sound(165));
						pc.sendPacketsX8(new S_SkillSound(pc.getId(),4627));
						pc.getInventory().removeItem(l1iteminstance,1);

					}else if(itemId ==2401333){//外掛檢測魔杖(GM)
						final L1Object target = L1World.getInstance().findObject(spellsc_objid);
						if (target instanceof L1PcInstance) {
							((L1PcInstance) target).setSkillEffect(AI_CheckEffect, 1000);
						}else if(target instanceof L1MonsterInstance){
							pc.sendPackets(new S_SystemMessage("怪物家族編號: "+((L1MonsterInstance) target).getNpcTemplate().get_family()));
						}
					}else if (itemId == 40077 || itemId == L1ItemId.SCROLL_OF_ENCHANT_WEAPON//對武器施法的卷軸
							|| itemId == L1ItemId.SCROLL_OF_ENCHANT_QUEST_WEAPON
							|| itemId == 40130 || itemId == 140130
							|| itemId == L1ItemId.B_SCROLL_OF_ENCHANT_WEAPON
							|| itemId == L1ItemId.C_SCROLL_OF_ENCHANT_WEAPON
							|| itemId == 40128|| itemId == 49312) {
						if(!checkEnchant(pc , l1iteminstance1 , (byte) 1 , true)){
							return;
						}

						C_ScrollOfEnchant.getInstnace().ScrollOfEnchantWeapon(l1iteminstance, l1iteminstance1, client);

					} else if (itemId == 40078//對盔甲施法的卷軸
							|| itemId == L1ItemId.SCROLL_OF_ENCHANT_ARMOR
							|| itemId == 40129 || itemId == 140129
							|| itemId == L1ItemId.B_SCROLL_OF_ENCHANT_ARMOR
							|| itemId == L1ItemId.C_SCROLL_OF_ENCHANT_ARMOR
							|| itemId == 40127|| itemId == 49311) {
						if(!checkEnchant(pc , l1iteminstance1 , (byte) 2 , true)){
							return;
						}
						C_ScrollOfEnchant.getInstnace().ScrollOfEnchantArmmor(l1iteminstance, l1iteminstance1, client);

						//					}else if(itemId == 780035 || itemId == 780045){//opqlo 戰鬥月餅
						//
						//						pc.setSkillEffect(戰鬥月餅, 600000);// 10分鐘
						//						pc.sendPackets(new S_SystemMessage("身上充滿了秒殺的力量。"));
						//						pc.getInventory().removeItem(l1iteminstance,1);
						//
						//					}else if(itemId == 780036){ // opqlo 防禦月餅
						//
						//						pc.setSkillEffect(防禦月餅, 600000);
						//						pc.sendPackets(new S_SystemMessage("身上充滿了無敵的力量。"));
						//						pc.getInventory().removeItem(l1iteminstance , 1);

					} else if (itemId == 780038){	//順丁烯二酸
						if(l1iteminstance1 == null){
							return;
						}
						final int targetid = l1iteminstance1.getItemId();

						if(targetid !=870077 	//月餅項鍊(左)
								&& targetid !=870078){	//月餅項鍊(右)
							pc.sendPackets(new S_SystemMessage("\\aF只能對月餅項鍊使用。"));
							return;
						}

						if(l1iteminstance1.isEquipped()){
							pc.getInventory().setEquipped(l1iteminstance1, false);
							//							pc.sendPackets(new S_SystemMessage("\\aF必須脫下裝備才能強化。"));
							//							return;
						}

						final int level = l1iteminstance1.getLevel();
						if(level >=30){
							pc.sendPackets(new S_SystemMessage("\\aF已達最高等級。"));
							return;
						}
						pc.getInventory().removeItem(l1iteminstance , 1);

						final int chance = Random.nextInt(100)+1;

						StringBuilder msg = new StringBuilder().append(l1iteminstance1.getLogName());
						boolean updata = false;
						if(chance <15){
							msg.append(" 強化成功，等級上升。");
							l1iteminstance1.setLevel(level+1);
							updata = true;
						}else if(chance < 96){
							msg.append(" 強化失敗，沒有任何事情發生。");

						}else{
							if(level <=2){
								msg.append(" 強化失敗，沒有任何事情發生。");
							}else{
								msg.append(" 強化失敗，等級下降。");
								l1iteminstance1.setLevel(level-1);
								updata = true;
							}
						}
						if(updata){
							ItemLevelUpTable.getInstance().getLevelStatus(l1iteminstance1);
						}
						pc.sendPackets(new S_SystemMessage(msg.toString()));
						msg.setLength(1);
						msg = null;
						pc.getInventory().saveItem(l1iteminstance1, L1PcInventory.COL_LEVEL);
						pc.getInventory().updateItem(l1iteminstance1, L1PcInventory.COL_LEVEL);
					}else if(itemId == 780073){//	全捅地溝油
						if(l1iteminstance.getCount() >=10){
							pc.getInventory().removeItem(l1iteminstance, 10);
							createNewItem(pc , 780075,1);//豬油包
						}else{
							pc.sendPackets(new S_SystemMessage("收集10個可換豬油包。"));
						}
					}else if(itemId == 780074){// 正液飼料油
						if(l1iteminstance1 == null){ return;}

						final int l1itemid = l1iteminstance1.getItemId();
						if(l1itemid == 810052 && l1iteminstance1.getBless() ==0 ){//北含王冠

							if(l1iteminstance1.getLevel() >= ItemLevelUpTable.getInstance().getTemplate(l1itemid).getMaxLevel()){
								pc.sendPackets(new S_SystemMessage("\\aF已達最高等級。"));
								return;
							}
							if(pc.getInventory().checkEquipped(810052)){
								pc.getInventory().setEquipped(l1iteminstance1, false);
							}
							pc.getInventory().removeItem(l1iteminstance , 1);

							final int chance = Random.nextInt(100)+1;
							final int level = l1iteminstance1.getLevel();
							StringBuilder msg = new StringBuilder().append(l1iteminstance1.getLogName());
							boolean updata = false;
							if(chance <13){
								msg.append(" 強化成功，等級上升。");
								l1iteminstance1.setLevel(level+1);
								updata = true;
							}else if(chance < 95){
								msg.append(" 強化失敗，沒有任何事情發生。");

							}else{
								if(level <2){
									msg.append(" 強化失敗，沒有任何事情發生。");
								}else{
									msg.append(" 強化失敗，等級下降。");
									l1iteminstance1.setLevel(level-1);
									updata = true;
								}
							}
							if(updata){
								ItemLevelUpTable.getInstance().getLevelStatus(l1iteminstance1);
							}
							pc.sendPackets(new S_SystemMessage(msg.toString()));
							msg.setLength(1);
							msg = null;
							pc.getInventory().saveItem(l1iteminstance1, L1PcInventory.COL_LEVEL);
							pc.getInventory().updateItem(l1iteminstance1, L1PcInventory.COL_LEVEL);
						}else{
							pc.sendPackets(new S_ServerMessage(79));
						}

					}else if(itemId == 780083){//	香噴噴的聖誕襪
						if(l1iteminstance.getCount() >=15){
							pc.getInventory().removeItem(l1iteminstance, 15);
							createNewItem(pc , 780084,1);//聖誕禮包
						}else{
							pc.sendPackets(new S_SystemMessage("收集15個可換聖誕禮包。"));
						}
					}else if(itemId == 780085){// 聖誕襪升級卷
						if(l1iteminstance1 == null){ return;}

						final int l1itemid = l1iteminstance1.getItemId();
						if(l1itemid == 870085 || l1itemid == 870086){//聖潔聖誕襪

							if(l1iteminstance1.getLevel() >= ItemLevelUpTable.getInstance().getTemplate(l1itemid).getMaxLevel()){
								pc.sendPackets(new S_SystemMessage("\\aF已達最高等級。"));
								return;
							}
							if(pc.getInventory().checkEquipped(l1itemid)){
								pc.getInventory().setEquipped(l1iteminstance1, false);
							}
							pc.getInventory().removeItem(l1iteminstance , 1);

							final int chance = Random.nextInt(100)+1;
							final int level = l1iteminstance1.getLevel();
							StringBuilder msg = new StringBuilder().append(l1iteminstance1.getLogName());
							boolean updata = false;
							if(chance <13){
								msg.append(" 強化成功，等級上升。");
								l1iteminstance1.setLevel(level+1);
								updata = true;
							}else if(chance < 95){
								msg.append(" 強化失敗，沒有任何事情發生。");

							}else{
								if(level <2){
									msg.append(" 強化失敗，沒有任何事情發生。");
								}else{
									msg.append(" 強化失敗，等級下降。");
									l1iteminstance1.setLevel(level-1);
									updata = true;
								}
							}
							if(updata){
								ItemLevelUpTable.getInstance().getLevelStatus(l1iteminstance1);
							}
							pc.sendPackets(new S_SystemMessage(msg.toString()));
							msg.setLength(1);
							msg = null;
							pc.getInventory().saveItem(l1iteminstance1, L1PcInventory.COL_LEVEL);
							pc.getInventory().updateItem(l1iteminstance1, L1PcInventory.COL_LEVEL);
						}else{
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId ==78039//50%完美防卷
							|| itemId ==78044//5%完美防卷
							|| itemId ==78045//10%完美防卷
							|| itemId ==78046//15%完美防卷
							){
						final int chance ;
						switch(itemId){
						case 78039:chance = 35;break;
						case 78044:chance = 4;break;
						case 78045:chance = 8;break;
						case 78046:chance = 12;break;
						default: chance =0;break;
						}
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						final L1Item item = l1iteminstance1.getItem();
						if(item.getType2()!=2){
							pc.sendPackets(new S_SystemMessage("請選擇一種防具。"));
							return;
						}
						if(l1iteminstance1.isIdentified() == false){
							pc.sendPackets(new S_SystemMessage("必須要先鑑定這個物品。"));
							return;
						}
						if(l1iteminstance1.getEnchantLevel() >=ARMOR_MAX_ENCHANT_LV){
							pc.sendPackets(new S_ServerMessage(166,l1iteminstance1.getLogName()+" 強化已達上限 "+ARMOR_MAX_ENCHANT_LV));
							return;
						}
						if(item.get_safeenchant() <0 || item.getBless() >=128){
							pc.sendPackets(new S_SystemMessage("這是無法強化的防具。"));
							return;
						}
						if(chance > Random.nextInt(100)+1){
							C_ScrollOfEnchant.getInstnace().SuccessEnchant(pc, l1iteminstance1, client, 1);
						}else{
							pc.sendPackets(new S_SystemMessage("強化失敗，沒有任何事情發生。"));
						}
						pc.getInventory().removeItem(l1iteminstance,1);

					} else if (itemId ==78040	//50%完美武卷
							|| itemId ==78041//5%完美武卷
							|| itemId ==78042//10%完美武卷
							|| itemId ==78043//15%完美武卷
							){
						final int chance ;
						switch(itemId){
						case 78040:chance = 35;break;
						case 78041:chance = 4;break;
						case 78042:chance = 8;break;
						case 78043:chance = 12;break;
						default: chance =0;break;
						}
						if(!checkEnchant(pc , l1iteminstance1 , (byte) 1 , true)){
							return;
						}
						if(chance > Random.nextInt(100)+1){
							C_ScrollOfEnchant.getInstnace().SuccessEnchant(pc, l1iteminstance1, client, 1);
						}else{
							pc.sendPackets(new S_SystemMessage("強化失敗，沒有任何事情發生。"));
						}
						pc.getInventory().removeItem(l1iteminstance,1);

					} else if (itemId>=600011 && itemId<=600110){ //opqlo 完美武卷
						if(!checkEnchant(pc , l1iteminstance1 , (byte) 1 , true)){
							return;
						}
						final boolean canuse = ((itemId - 600010)*10)>l1iteminstance1.getEnchantLevel();

						if(canuse){
							pc.getInventory().removeItem(l1iteminstance,1);
							C_ScrollOfEnchant.getInstnace().SuccessEnchant(pc, l1iteminstance1, client, 1);
						}else{
							pc.sendPackets(new S_SystemMessage(l1iteminstance.getName()+" 無法強化這把武器。"));
						}
					} else if (itemId>=601011 && itemId<=601110){ //opqlo 完美防卷
						if(!checkEnchant(pc , l1iteminstance1 , (byte) 2 , true)){
							return;
						}
						final boolean canuse = ((itemId - 601010)*10)>l1iteminstance1.getEnchantLevel();

						if(canuse){
							pc.getInventory().removeItem(l1iteminstance,1);
							C_ScrollOfEnchant.getInstnace().SuccessEnchant(pc, l1iteminstance1, client, 1);
						}else{
							pc.sendPackets(new S_SystemMessage(l1iteminstance.getName()+" 無法強化這件防具。"));
						}
					}else if(itemId >=78059 && itemId <= 78064){//10~30%高級完美武卷 高級完美防卷
						int rate =0;
						if(itemId <=78061){
							if(!checkEnchant(pc , l1iteminstance1 , (byte) 1 , false)){
								return;
							}
							switch(itemId){
							case 78059: rate=9; break;
							case 78060: rate=18; break;
							case 78061: rate=27; break;
							}
						}else{
							if(!checkEnchant(pc , l1iteminstance1 , (byte) 2 , false)){
								return;
							}
							switch(itemId){
							case 78062: rate=9; break;
							case 78063: rate=18; break;
							case 78064: rate=27; break;
							}
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
						if(rate >= Random.nextInt(100)+1){
							C_ScrollOfEnchant.getInstnace().SuccessEnchant(pc, l1iteminstance1, client, 1);
							L1World.getInstance().broadcastPacketToAll(new A_ColorMessage(A_ColorMessage.隊伍橘色 , "["+pc.getName()+"]的 +"+l1iteminstance1.getEnchantLevel()+l1iteminstance1.getName()+"強化成功"));
							L1World.getInstance().broadcastPacketToAll(new A_ColorMessage(A_ColorMessage.隊伍橘色 , ENCHANT_MSG[Random.nextInt(ENCHANT_MSG.length)]+"的說:想要嗎? "+ENCHANT_MSG2[Random.nextInt(ENCHANT_MSG2.length)]));
						}else{
							pc.sendPackets(new S_SystemMessage("強化失敗，沒有任何事情發生。"));
						}

						/**opqlo 神恩十月大禮包**/
					}else if(itemId == 77775 || itemId == 77776 || itemId == 77777
							|| itemId == 77778 || itemId == 77779){
						final int[] itemlist = {77775 , 77776 , 77777 , 77778 , 77779};
						final L1PcInventory inv = pc.getInventory();
						for(final int id : itemlist){
							if(inv.findItemId(id) == null){
								pc.sendPackets(new S_SystemMessage("集滿(神恩十月禮) 5個字，可兌換一個禮包。"));
								return;
							}
						}
						for(final int id : itemlist){
							inv.removeItemByItemId(id, 1);
						}
						createNewItem(pc, 77780, 1);

					}else if(itemId == 600010 ){//	蜻蜓牌膠水
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						final int target_itemid = l1iteminstance1.getItemId();

						if((target_itemid >=600011 && target_itemid <=600110 ) // 1~100完美武卷
								||(target_itemid >=601011 && target_itemid <=601110)){ // 1~100完美防卷

							if(target_itemid == 600110 || target_itemid == 601110){
								pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 已經是最高等級。"));
								return;
							}
							if(l1iteminstance1.getCount() <2){
								pc.sendPackets(new S_SystemMessage("最少需要兩張以上才能合成。"));
								return;
							}
							final L1PcInventory inv = pc.getInventory();
							inv.removeItem(l1iteminstance, 1);
							inv.removeItem(l1iteminstance1, 2);
							boolean supper = false;
							if((Random.nextInt(100)+1) >30){
								supper = true;
							}

							if(supper){
								createNewItem(pc, (target_itemid+1), 1);
								pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 強化成功。"));
							}else{
								pc.sendPackets(new S_SystemMessage(l1iteminstance1.getName()+" 強化失敗,卷軸消失。"));
							}

						}else{
							pc.sendPackets(new S_SystemMessage("只能對階段完美武、防卷使用。"));
						}


					} else if(itemId == 780018){//opqlo 狂斬臂甲----臂甲碎片

						if(l1iteminstance.getCount()>=1000){
							pc.getInventory().removeItem(l1iteminstance, 1000);
							createNewItem(pc,810005,1);

						}else{
							pc.sendPackets(new S_SystemMessage("收集數量 1000個，可兌換【20%狂斬臂甲】"));
						}
					}else if(itemId == 780029){
						if(l1iteminstance.getCount()>=5000){
							pc.getInventory().removeItem(l1iteminstance, 5000);
							createNewItem(pc,810064,1);

						}else{
							pc.sendPackets(new S_SystemMessage("收集數量5000個，可兌換【25%狂斬臂甲】"));
						}
					} else if(itemId == 610027){//殞鳳副本鑰匙
						//						TreasureMaster.getInstance().TreasureBegin(pc, 1, true, itemId);
						final L1Party party = pc.getParty();
						if(party !=null){
							if (party.isLeader(pc)) {
								if(FireRoomThread.get().CreateRoom(pc)){
									pc.getInventory().removeItem(l1iteminstance);
								}
							}else{
								pc.sendPackets(new S_SystemMessage("你不是隊長。"));
							}
						}else{
							pc.sendPackets(new S_SystemMessage("你沒有組隊。"));
						}
					} else if (itemId == 49148) {//TODO 飾品強化卷軸
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						if (l1iteminstance1.getDeleteDate() != null) {//opqlo 道具天數刪除系統(不可強化)
							pc.sendPackets(new S_ServerMessage(79));
							return;
						}
						C_ScrollOfEnchant.getInstnace().Accessories(l1iteminstance, l1iteminstance1, client);

					} else if (itemId == 49290 || itemId == 49291 || itemId == 49292|| itemId == 49293) {//TODO 魔法武器卷軸改寫
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						if (l1iteminstance1.getDeleteDate() != null) {//opqlo 道具天數刪除系統(不可強化)
							pc.sendPackets(new S_ServerMessage(79));
							return;
						}
						C_ScrollOfEnchant.getInstnace().magicweaponscroll(l1iteminstance, l1iteminstance1, pc);


					} else if (itemId == 240107) {//TODO 裝備保護卷軸 by missu0524
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						if (l1iteminstance1.getDeleteDate() != null) {//opqlo 道具天數刪除系統(不可強化)
							pc.sendPackets(new S_ServerMessage(79));
							return;
						}
						C_ScrollOfEnchant.getInstnace().ProtectionScroll(l1iteminstance, l1iteminstance1, pc);


					} else if (itemId == 41429 || itemId == 41430 || itemId == 41431|| itemId == 41432 
							||itemId == 245171 ||itemId == 245172) { // 風の武器強化スクロール～火の武器強化スクロールopqlo光闇屬性卷軸
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						C_ScrollOfEnchant.getInstnace().PropertyScroll(l1iteminstance, l1iteminstance1, pc);

					}else if(itemId == 245170){//opqlo 密碼修改捲
						for(int i=0; i <5; i++){
							pc.sendPackets(new A_ColorMessage("舊密碼已清除，請於登入處輸入新密碼。"));
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
						C_opqloSpecial.PassWorldChange(client);

					}else if (itemId == 41295) { //TODO 新鮮的餌
						pc.sendPackets(new S_ServerMessage(452, l1iteminstance.getLogName()));
					} else if (itemId == 40003) { // ランタン オイル
						for (final L1ItemInstance lightItem : pc.getInventory().getItems()) {
							if (lightItem.getItem().getItemId() == 40002) {
								lightItem.setRemainingTime(l1iteminstance.getItem().getLightFuel());
								pc.sendPackets(new S_ItemName(lightItem));
								pc.sendPackets(new S_ServerMessage(230)); // ランタンにオイルを注ぎました。
								break;
							}
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
						CharacterTable.getInstance().restoreInventory(pc);
					} else if (itemId == 43000) { // 復活のポーション（Lv99キャラのみが使用可能/Lv1に戾る效果）
						C_opqloSpecial.Reincarnation(l1iteminstance, pc);//轉生藥水

					} else if (itemId == 240105) { // TODO 重生藥水
						C_opqloSpecial.Reincarnation(l1iteminstance, pc);

					} else if (itemId == 240106) {// TODO 解卡點卷軸by xpatax
						if(!pc.hasSkillEffect(解卡點卷軸)){
							Connection connection = null;
							connection = DatabaseFactory.get().getConnection();
							final PreparedStatement preparedstatement = connection
									.prepareStatement("UPDATE characters SET LocX=33442,LocY=32797,MapID=4 WHERE account_name=?");
							preparedstatement.setString(1, client.getAccountName());
							preparedstatement.execute();
							preparedstatement.close();
							connection.close();
							pc.sendPackets(new S_SystemMessage("除了你，其他角色已回到奇岩村。"));
							pc.getInventory().removeItem(l1iteminstance, 1);
							pc.setSkillEffect(解卡點卷軸, 30000);
						}else{
							pc.sendPackets(new S_SystemMessage("你已經使用過了，要過一段時間才可以再使用。"));
						}
					}else if(itemId == 610046){//死鬥競技場(一般區)
						if(pc.isCantTeleport()){
							pc.sendPackets(new S_ServerMessage(647));
							return;
						}
						if(!pc.isGm() && pc.get_metempsychosis() <100){
							pc.sendPackets(new S_SystemMessage("這個地方只有頭銜為【英雄】以上才可以進入。"));
							return;
						}
						int x=32817 , y = 32849 , tryCount = 0;
						//						final int[] mapXY = MapsTable.getInstance().getTemplate(1813);
						final int locx1 = 32744 ,locx2 = 32862 ,locy1 = 32770, locy2 = 32862;
						//						final int locx1 = mapXY[0] ,locx2 = mapXY[1] ,locy1 = mapXY[2], locy2 = mapXY[3];
						do{
							final L1Map map = L1WorldMap.getInstance().getMap((short) 1813);
							final int rangeX = locx2 - locx1;
							final int rangeY = locy2 - locy1;
							x = Random.nextInt(rangeX) + locx1;
							y = Random.nextInt(rangeY) + locy1;
							if(map.isInMap(x, y) && map.isPassable(x, y)) {
								break;
							}
						}while (tryCount<50);
						if (tryCount >= 50) {
							x = 32817;
							y = 32849;
						}
						L1Teleport.teleportMagic(pc, x, y, (short)1813, 5, true, 2);
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.setPinkName(true);
						pc.setSkillEffect(PC_IsPinkName, 180000);
						pc.sendPacketsAll(new S_PinkName(pc.getId(), 180));

						/*	//opqlo 紅人追殺令
				}else if (itemId == 123444){
					final Collection<L1PcInstance> pclist = L1World.getInstance().getAllPlayers();
					if(pclist.size()!=0){
						for(L1PcInstance pc2: pclist){
							if(pc2==pc){
								continue;
							}else if(pc.getMapId()!=pc2.getMapId()){
								continue;
							}else if(pc2.getLawful()>=0){
								pc.sendPackets(new S_SystemMessage("這地圖沒有邪惡之氣。"));
								continue;
							}else if(!pc2.isTeleport()&& !pc2.isDead()&& !pc2.isGhost() && pc2!=null){
								L1Teleport.teleport(pc, pc2.getX(), pc2.getY(), pc2.getMapId(),5,true);
								break;
							}else{
								pc.sendPackets(new S_SystemMessage("這地圖沒有邪惡之氣。"));
							}
						}

					}
						 */
						//opqlo 改名卷軸
					} else if (itemId == 245161){
						if(pc.isChangeName()){
							pc.sendPackets(new A_ColorMessage(1,"請在對話框輸入:\n在你要的名稱前加上[新名稱]\n例如:新名稱"+pc.getName()+"\n變更後角色名稱為:"+pc.getName()));
							return;
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.setChangeName(1);
						pc.sendPackets(new A_ColorMessage(1,"請在對話框輸入:\n在你要的名稱前加上[新名稱]\n例如:新名稱"+pc.getName()+"\n變更後角色名稱為:"+pc.getName()));
						//opqlo 改ID卷軸

					} else if (itemId==40308){//金幣換支票
						C_opqloSpecial.MoneyToCheck(l1iteminstance, pc);

					} else if (itemId==60308){//支票換金幣
						C_opqloSpecial.CheckToMoney(l1iteminstance, pc);
						//opqlo 新增

						//TODO HP貨幣和MP貨幣 by ccxiaonan 
					} else if (itemId == 240108) { // HP+10 
						if(!pc.getInventory().checkItem(itemId,1)){
							return;
						}
						pc.addBaseMaxHp((byte) 10); //TODO HP+10 
						pc.getInventory().removeItem(l1iteminstance, 1); 
						pc.sendPackets(new S_SystemMessage("你的HP值永久+10")); 
						try {
							// DBにキャラクター情報を書き迂む
							pc.save();
						} catch (Exception e) {
							_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
						}
						pc.sendPackets(new S_OwnCharStatus(pc));
					} else if (itemId == 240109) { //TODO MP+10 
						if(!pc.getInventory().checkItem(itemId,1)){
							return;
						}
						pc.addBaseMaxMp((byte) 10); //TODO MP+10 
						pc.getInventory().removeItem(l1iteminstance, 1); 
						pc.sendPackets(new S_SystemMessage("你的MP值永久+10")); 
						try {
							// DBにキャラクター情報を書き迂む
							pc.save();
						} catch (Exception e) {
							_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
						}
						pc.sendPackets(new S_OwnCharStatus(pc));
					} else if (itemId == 240110) { //TODO HP+75 
						if(!pc.getInventory().checkItem(itemId,1)){
							return;
						}
						pc.addBaseMaxHp((byte) 75); //TODO HP+75 
						pc.getInventory().removeItem(l1iteminstance, 1); 
						pc.sendPackets(new S_SystemMessage("你的HP值永久+75")); 
						try {
							// DBにキャラクター情報を書き迂む
							pc.save();
						} catch (Exception e) {
							_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
						}
						pc.sendPackets(new S_OwnCharStatus(pc)); 
					} else if (itemId == 240111) { //TODO MP+75 
						if(!pc.getInventory().checkItem(itemId,1)){
							return;
						}
						pc.addBaseMaxMp((byte) 75); //TODO MP+75 
						pc.getInventory().removeItem(l1iteminstance, 1); 
						pc.sendPackets(new S_SystemMessage("你的MP值永久+75")); 
						try {
							// DBにキャラクター情報を書き迂む
							pc.save();
						} catch (Exception e) {
							_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
						}
						pc.sendPackets(new S_OwnCharStatus(pc));

					} else if (itemId == 240113) {//怪物偷窺卡
						L1Object target = L1World.getInstance().findObject(spellsc_objid);
						if (target != null) {   
							String msg0 = "";  
							String msg1 = "";   
							String msg2 = "";   
							String msg3 = "";  
							String msg4 = "";  
							String msg5 = "";   
							String msg6 = "";  
							String msg7 = "";  
							String msg8 = "";   
							String msg9 = "";   
							String msg10 = "";
							String msg11 = "";
							String msg12 = "";
							String msg13 = "";
							if (target instanceof L1MonsterInstance) {
								L1MonsterInstance target_npc = (L1MonsterInstance) target;  
								msg0 = target_npc.getName();
								msg1 = "" + target_npc.getNpcId();   
								msg2 = "" + target_npc.getGfxId();   
								msg3 = "" + target_npc.getLevel();  
								msg4 = "" + target_npc.getMaxHp();   
								msg5 = "" + target_npc.getMaxMp();  
								msg6 = "" + target_npc.getAc();   
								msg7 = "" + target_npc.getStr(); 
								msg8 = "" + target_npc.getCon(); 
								msg9 = "" + target_npc.getDex();   
								msg10 = "" + target_npc.getWis();
								msg11 = "" + target_npc.getInt();
								msg12 = "" + target_npc.getExp(); 
								msg13 = "" + target_npc.getLawful();  
								String msg[] = { msg0, msg1, msg2, msg3, msg4, msg5, msg6, msg7, msg8, msg9, msg10, msg11 , msg12 , msg13};   
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "love6", msg));  


							} else { 
								pc.sendPackets(new S_ServerMessage(79));  
							}   
						}   
					}
					//TODO 魔法道具系統&召換系統
					else if (itemId == L1WilliamItemMagic.checkItemId(itemId)) {
						final L1WilliamItemMagic Item_Magic = ItemMagic.getInstance().getTemplate(itemId);
						if (Item_Magic.getCheckClass() != 0) {//TODO 職業判斷
							byte class_id = (byte) 0;
							String msg = "";
							if (pc.isCrown()) {//TODO 王族
								class_id = 1;
							} else if (pc.isKnight()) {//TODO 騎士
								class_id = 2;
							} else if (pc.isWizard()) {//TODO 法師
								class_id = 3;
							} else if (pc.isElf()) {//TODO 妖精
								class_id = 4;
							} else if (pc.isDarkelf()) {//TODO 黑妖
								class_id = 5;
							} else if (pc.isDragonKnight()) {//TODO 龍騎士
								class_id = 6;
							} else if (pc.isIllusionist()) {//TODO 幻術師
								class_id = 7;
							}
							switch(Item_Magic.getCheckClass()){
							case 1:
								msg = "王族";
								break;
							case 2:
								msg = "騎士";
								break;
							case 3:
								msg = "法師";
								break;
							case 4:
								msg = "妖精";
								break;
							case 5:
								msg = "黑暗妖精";
								break;
							case 6:
								msg = "龍騎士";
								break;
							case 7:
								msg = "幻術師";
								break;
							}
							if (Item_Magic.getCheckClass() != class_id) {//TODO 職業不符
								pc.sendPackets(new S_SystemMessage("職業必須為" +msg+  "才能使用。"));	
								return;
							}
						}
						if (Item_Magic.getCheckItem() != 0) { //TODO 攜帶物品判斷
							if (!pc.getInventory().checkItem(Item_Magic.getCheckItem())) {
								L1Item temp = ItemTable.getInstance().getTemplate(Item_Magic.getCheckItem());
								pc.sendPackets(new S_SystemMessage("必須有" +temp.getName()+ "才能使用。"));
								return;
							}
						}
						if (spellsc_objid == pc.getId() && l1iteminstance.getItem().getUseType() != 30) {
							pc.sendPackets(new S_ServerMessage(281));
							return;
						}
						if (spellsc_objid == 0
								&& l1iteminstance.getItem().getUseType() != 0
								&& l1iteminstance.getItem().getUseType() != 26
								&& l1iteminstance.getItem().getUseType() != 27) {
							return;
						}
						L1BuffUtil.cancelAbsoluteBarrier(pc);
						final L1SkillUse l1skilluse = new L1SkillUse();
						if (Item_Magic.getRemoveItem() == 0) {//TODO 刪除道具判斷
							switch(Item_Magic.getSkillId()){
							case 12: case 21: case 107:
								l1skilluse.handleCommands(client.getActiveChar(),Item_Magic.getSkillId(), l, 0, 0,null, 0, L1SkillUse.TYPE_NORMAL);
								break;
							default:
								l1skilluse.handleCommands(client.getActiveChar(), Item_Magic.getSkillId(), spellsc_objid, spellsc_x, spellsc_y, null, 0, L1SkillUse.TYPE_NORMAL);
								break;
							}
						} else {
							switch(Item_Magic.getSkillId()){
							case 12: case 21: case 107:
								l1skilluse.handleCommands(client.getActiveChar(),Item_Magic.getSkillId(), l, 0, 0,null, 0, L1SkillUse.TYPE_SPELLSC);
								break;
							default:
								l1skilluse.handleCommands(client.getActiveChar(), Item_Magic.getSkillId(), spellsc_objid, spellsc_x, spellsc_y, null, 0, L1SkillUse.TYPE_SPELLSC);
								break;
							}
							pc.getInventory().removeItem(l1iteminstance, 1);
						}
					} else if (l1iteminstance.getItem().getType() == 18) {//TODO 召唤道具
						if (L1WilliamItemSummon.checkItemId(itemId) != 0) {
							L1WilliamItemSummon.getItemSummon(pc, l1iteminstance, itemId);
						} else {
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId == L1WilliamTeleportScroll.checkItemId(itemId)) {
						L1WilliamTeleportScroll.getTeleportScroll(pc, l1iteminstance, itemId);

						//TODO 魔法道具系統&召換系統&傳送系統

					} else if (itemId == 240112) { //TODO 情人的祝福
						if (pc.getInventory().consumeItem(40308,100000)) {//TODO 要扣除的金幣數量
							pc.setCurrentHp(pc.getCurrentHp() + 1000);//TODO 補血的量
							pc.setCurrentMp(pc.getCurrentMp() + 1000);//TODO 補魔的量
							pc.sendPacketsX8(new S_SkillSound(pc.getId(), 189));
						} else { 
							pc.sendPackets(new S_SystemMessage("金幣不足。"));
						}
						pc.getInventory().removeItem(l1iteminstance, 1);

					} else if (itemId == 40858) { // liquor（酒）
						pc.setDrink(true);
						pc.sendPackets(new S_Liquor(pc.getId(),1));
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == L1ItemId.POTION_OF_CURE_POISON
							|| itemId == 40507) { // シアンポーション、エントの枝
						if (pc.hasSkillEffect(71) == true) { // ディケイポーションの狀態
							pc.sendPackets(new S_ServerMessage(698)); // 魔力によって何も飲むことができません。
						} else {
							L1BuffUtil.cancelAbsoluteBarrier(pc); // アブソルート バリアの解除
							pc.sendPacketsX8(new S_SkillSound(pc.getId(), 192));
							if (itemId == L1ItemId.POTION_OF_CURE_POISON) {
								pc.getInventory().removeItem(l1iteminstance, 1);
							} else if (itemId == 40507) {
								pc.getInventory().removeItem(l1iteminstance, 1);
							}
							pc.curePoison();
						}
					} else if (itemId == L1ItemId.POTION_OF_HASTE_SELF
							|| itemId == L1ItemId.B_POTION_OF_HASTE_SELF
							|| itemId == 40018 // 強化グリーン ポーション
							|| itemId == 140018 // 祝福された強化グリーン ポーション
							/*刪除|| itemId == 40039 // ワイン
						|| itemId == 40040 // ウイスキー刪除*/
							|| itemId == 40030 // 象牙の塔のヘイスト ポーション
							|| itemId == 41338 // 祝福されたワイン
							|| itemId == 41261 // おむすび
							|| itemId == 41262 // 燒き鳥
							|| itemId == 41268 // ピザのピース
							|| itemId == 41269 // 燒きもろこし
							|| itemId == 41271 // ポップコーン
							|| itemId == 41272 // おでん
							|| itemId == 41273 // ワッフル
							|| itemId == 41342) { // メデューサの血
						C_BravePotion.useGreenPotion(pc, itemId);
						pc.getInventory().removeItem(l1iteminstance, 1);

					} else if (itemId == L1ItemId.POTION_OF_EMOTION_BRAVERY // ブレイブポーション
							|| itemId == L1ItemId.B_POTION_OF_EMOTION_BRAVERY // 祝福されたブレイブポーション
							|| itemId == 41415) { // 強化ブレイブポーション
						if (pc.isKnight()) {
							C_BravePotion.useBravePotion(pc, itemId);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
						//TODO 法師 紅酒
					}else if (itemId == 40039) { //TODO 紅酒
						if (pc.isWizard()) {
							C_BravePotion.useBravePotion(pc, itemId);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
						//TODO 黑妖  威士忌
					}else if (itemId == 40040) { // 強化ブレイブポーション
						if (pc.isDarkelf()) {
							C_BravePotion.useBravePotion(pc, itemId);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 49158) {// ユグドラの實
						if (pc.isIllusionist()) {//TODO 龍騎士無法使用
							C_BravePotion.useBravePotion(pc, itemId);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40068 // エルヴン ワッフル
							|| itemId == 140068) { // 祝福されたエルヴン ワッフル
						if (pc.isElf()) {
							C_BravePotion.useBravePotion(pc, itemId);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40031) { // イビル ブラッド
						if (pc.isCrown()) {
							C_BravePotion.useBravePotion(pc, itemId);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40733) { //TODO 名譽貨幣 eboy全職業可使用名譽貨幣
						C_BravePotion.useBravePotion(pc, itemId);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40066 || itemId == 41413) { // お餅、月餅
						pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
						pc.setCurrentMp(pc.getCurrentMp()+ (7 + Random.nextInt(6))); // 7~12
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40067 || itemId == 41414) { // よもぎ餅、福餅
						pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
						pc.setCurrentMp(pc.getCurrentMp()+ (15 + Random.nextInt(16))); // 15~30
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40735) { // 勇氣のコイン
						pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
						pc.setCurrentMp(pc.getCurrentMp() + 60);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40042) { // スピリットポーション
						pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
						pc.setCurrentMp(pc.getCurrentMp() + 50);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41404) { // クジャクの靈藥
						pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
						pc.setCurrentMp(pc.getCurrentMp()+ (80 + Random.nextInt(21))); // 80~100
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41412) { // 金のチョンズ
						pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
						pc.setCurrentMp(pc.getCurrentMp()+ (5 + Random.nextInt(16))); // 5~20
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40032 || itemId == 40041
							|| itemId == 41344) { // エヴァの祝福、マーメイドの鱗、水の精粹
						C_BravePotion.useBlessOfEva(pc, itemId);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == L1ItemId.POTION_OF_MANA // ブルー ポーション
							|| itemId == L1ItemId.B_POTION_OF_MANA // 祝福されたブルーポーション
							|| itemId == 40736) { // 知惠のコイン
						C_BravePotion.useBluePotion(pc, itemId);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == L1ItemId.POTION_OF_EMOTION_WISDOM // ウィズダムポーション
							|| itemId == L1ItemId.B_POTION_OF_EMOTION_WISDOM) { // 祝福されたウィズダムポーション
						if (pc.isWizard()) {
							C_BravePotion.useWisdomPotion(pc, itemId);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == L1ItemId.POTION_OF_BLINDNESS) { // オペイクポーション
						C_BravePotion.useBlindPotion(pc);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41154 // 闇の鱗
							|| itemId == 41155 // 烈火の鱗
							|| itemId == 41156 // 背德者の鱗
							|| itemId == 41157 // 憎惡の鱗
							|| itemId == 49220) { // オーク密使變身スクロール
						C_PolyMorph.usePolyScale(pc, itemId);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41143 // ラバーボーンヘッド變身ポーション
							|| itemId == 41144 // ラバーボーンアーチャー變身ポーション
							|| itemId == 41145 // ラバーボーンナイフ變身ポーション
							|| itemId == 49149 // 夏納的變形卷軸(等級30)
							|| itemId == 49150 // 夏納的變形卷軸(等級40)
							|| itemId == 49151 // 夏納的變形卷軸(等級52)
							|| itemId == 49152 // 夏納的變形卷軸(等級55)
							|| itemId == 49153 // 夏納的變形卷軸(等級60)
							|| itemId == 49154 // 夏納的變形卷軸(等級65)
							|| itemId == 49155) { // 夏納的變形卷軸(等級70)）
						C_PolyMorph.usePolyPotion(pc, itemId);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40317) { // 砥石武器か防具の場合のみ
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						if (l1iteminstance1.getItem().getType2() != 0
								&& l1iteminstance1.get_durability() > 0) {
							String msg0;
							pc.getInventory().recoveryDamage(l1iteminstance1);
							msg0 = l1iteminstance1.getLogName();
							if (l1iteminstance1.get_durability() == 0) {
								pc.sendPackets(new S_ServerMessage(464, msg0)); // %0%sは新品同樣の狀態になりました。
							} else {
								pc.sendPackets(new S_ServerMessage(463, msg0)); // %0の狀態が良くなりました。
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40097 || itemId == 40119
							|| itemId == 140119 || itemId == 140329) { // 解咒スクロール、原住民のトーテム
						for (L1ItemInstance eachItem : pc.getInventory().getItems()) {
							if (eachItem.getItem().getBless() != 2
									&& eachItem.getItem().getBless() != 130) {
								continue;
							}
							if (!eachItem.isEquipped()&& (itemId == 40119 || itemId == 40097)) {// n解咒は裝備しているものしか解咒しない
								continue;
							}
							//TODO 修正詛咒裝備解除詛咒後顏色錯誤by99團隊
							eachItem.setBless(1);
							//TODO 修正詛咒裝備解除詛咒後顏色錯誤by99團隊
							int id_normal = eachItem.getItemId() - 200000;
							L1Item template = ItemTable.getInstance().getTemplate(
									id_normal);
							if (template == null) {
								continue;
							}
							if (pc.getInventory().checkItem(id_normal)&& template.isStackable()) {
								pc.getInventory().storeItem(id_normal,eachItem.getCount());
								pc.getInventory().removeItem(eachItem,eachItem.getCount());
							} else {
								eachItem.setItem(template);
								pc.getInventory().updateItem(eachItem,L1PcInventory.COL_ITEMID);
								pc.getInventory().saveItem(eachItem,L1PcInventory.COL_ITEMID);
							}
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.sendPackets(new S_ServerMessage(155)); // \f1誰かが助けてくれたようです。

					} else if (itemId == 41036) { // 糊
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						final int diaryId = l1iteminstance1.getItem().getItemId();
						if (diaryId >= 41038 && 41047 >= diaryId) {
							if ((Random.nextInt(99) + 1) <= Config.CREATE_CHANCE_DIARY) {
								createNewItem(pc, diaryId + 10, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(158,l1iteminstance1.getName())); // \f1%0が蒸發してなくなりました。
							}
							pc.getInventory().removeItem(l1iteminstance1, 1);
							pc.getInventory().removeItem(l1iteminstance, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}



					} else if (itemId >= 41048 && 41055 >= itemId) {
						// 糊付けされた航海日誌ページ：１～８ページ
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						int logbookId = l1iteminstance1.getItem().getItemId();
						if (logbookId == (itemId + 8034)) {
							createNewItem(pc, logbookId + 2, 1);
							pc.getInventory().removeItem(l1iteminstance1, 1);
							pc.getInventory().removeItem(l1iteminstance, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 41056 || itemId == 41057) {
						// 糊付けされた航海日誌ページ：９，１０ページ
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						final int logbookId = l1iteminstance1.getItem().getItemId();
						if (logbookId == (itemId + 8034)) {
							createNewItem(pc, 41058, 1);
							pc.getInventory().removeItem(l1iteminstance1, 1);
							pc.getInventory().removeItem(l1iteminstance, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40925) { // 淨化のポーション
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						final int earingId = l1iteminstance1.getItem().getItemId();
						if (earingId >= 40987 && 40989 >= earingId) { // 咒われたブラックイアリング
							if (Random.nextInt(100) < Config.CREATE_CHANCE_RECOLLECTION) {
								createNewItem(pc, earingId + 186, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(158,l1iteminstance1.getName())); // \f1%0が蒸發してなくなりました。
							}
							pc.getInventory().removeItem(l1iteminstance1, 1);
							pc.getInventory().removeItem(l1iteminstance, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId >= 40926 && 40929 >= itemId) {
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						// ミステリアスポーション（１～４段階）
						final int earing2Id = l1iteminstance1.getItem().getItemId();
						int potion1 = 0;
						int potion2 = 0;
						if (earing2Id >= 41173 && 41184 >= earing2Id) {
							// イアリング類
							if (itemId == 40926) {
								potion1 = 247;
								potion2 = 249;
							} else if (itemId == 40927) {
								potion1 = 249;
								potion2 = 251;
							} else if (itemId == 40928) {
								potion1 = 251;
								potion2 = 253;
							} else if (itemId == 40929) {
								potion1 = 253;
								potion2 = 255;
							}
							if (earing2Id >= (itemId + potion1)
									&& (itemId + potion2) >= earing2Id) {
								if ((Random.nextInt(99) + 1) < Config.CREATE_CHANCE_MYSTERIOUS) {
									createNewItem(pc, (earing2Id - 12), 1);
									pc.getInventory()
									.removeItem(l1iteminstance1, 1);
									pc.getInventory().removeItem(l1iteminstance, 1);
								} else {
									pc.sendPackets(new S_ServerMessage(160,l1iteminstance1.getName()));// \f1%0が%2強烈に%1光りましたが、幸い無事にすみました。
									pc.getInventory().removeItem(l1iteminstance, 1);
								}
							} else {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId >= 40931 && 40942 >= itemId) {
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						// 加工された寶石類（サファイア・ルビー・エメラルド）
						final int earing3Id = l1iteminstance1.getItem().getItemId();
						int earinglevel = 0;
						if (earing3Id >= 41161 && 41172 >= earing3Id) {
							// ミステリアスイアリング類
							if (earing3Id == (itemId + 230)) {
								if ((Random.nextInt(99) + 1) < Config.CREATE_CHANCE_PROCESSING) {
									switch(earing3Id){
									case 41161:
										earinglevel = 21014;
										break;
									case 41162:
										earinglevel = 21006;
										break;
									case 41163:
										earinglevel = 21007;
										break;
									case 41164:
										earinglevel = 21015;
										break;
									case 41165:
										earinglevel = 21009;
										break;
									case 41166:
										earinglevel = 21008;
										break;
									case 41167:
										earinglevel = 21016;
										break;
									case 41168:
										earinglevel = 21012;
										break;
									case 41169:
										earinglevel = 21010;
										break;
									case 41170:
										earinglevel = 21017;
										break;
									case 41171:
										earinglevel = 21013;
										break;
									case 41172:
										earinglevel = 21011;
										break;
									}
									createNewItem(pc, earinglevel, 1);
								} else {
									pc.sendPackets(new S_ServerMessage(158,l1iteminstance1.getName()));// \f1%0が蒸發してなくなりました。
								}
								pc.getInventory().removeItem(l1iteminstance1, 1);
								pc.getInventory().removeItem(l1iteminstance, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId >= 40943 && 40958 >= itemId) {// 加工されたダイアモンド（ウォータ・アース・ファイアー・ウインド）
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						final int ringId = l1iteminstance1.getItem().getItemId();
						int ringlevel = 0;
						int gmas = 0;
						int gmam = 0;
						if (ringId >= 41185 && 41200 >= ringId) {
							// 細工されたリング類
							if (itemId == 40943 || itemId == 40947
									|| itemId == 40951 || itemId == 40955) {
								gmas = 443;
								gmam = 447;
							} else if (itemId == 40944 || itemId == 40948
									|| itemId == 40952 || itemId == 40956) {
								gmas = 442;
								gmam = 446;
							} else if (itemId == 40945 || itemId == 40949
									|| itemId == 40953 || itemId == 40957) {
								gmas = 441;
								gmam = 445;
							} else if (itemId == 40946 || itemId == 40950
									|| itemId == 40954 || itemId == 40958) {
								gmas = 444;
								gmam = 448;
							}
							if (ringId == (itemId + 242)) {
								if ((Random.nextInt(99) + 1) < Config.CREATE_CHANCE_PROCESSING_DIAMOND) {
									if (ringId == 41185) {
										ringlevel = 20435;
									} else if (ringId == 41186) {
										ringlevel = 20436;
									} else if (ringId == 41187) {
										ringlevel = 20437;
									} else if (ringId == 41188) {
										ringlevel = 20438;
									} else if (ringId == 41189) {
										ringlevel = 20439;
									} else if (ringId == 41190) {
										ringlevel = 20440;
									} else if (ringId == 41191) {
										ringlevel = 20441;
									} else if (ringId == 41192) {
										ringlevel = 20442;
									} else if (ringId == 41193) {
										ringlevel = 20443;
									} else if (ringId == 41194) {
										ringlevel = 20444;
									} else if (ringId == 41195) {
										ringlevel = 20445;
									} else if (ringId == 41196) {
										ringlevel = 20446;
									} else if (ringId == 41197) {
										ringlevel = 20447;
									} else if (ringId == 41198) {
										ringlevel = 20448;
									} else if (ringId == 41199) {
										ringlevel = 20449;
									} else if (ringId == 41120) {
										ringlevel = 20450;
									}
									pc.sendPackets(new S_ServerMessage(gmas,l1iteminstance1.getName()));
									createNewItem(pc, ringlevel, 1);
									pc.getInventory().removeItem(l1iteminstance1, 1);
									pc.getInventory().removeItem(l1iteminstance, 1);
								} else {
									pc.sendPackets(new S_ServerMessage(gmam,l1iteminstance.getName()));
									pc.getInventory().removeItem(l1iteminstance, 1);
								}
							} else {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 41029) { // 召喚球の欠片
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						final int dantesId = l1iteminstance1.getItem().getItemId();
						if (dantesId >= 41030 && 41034 >= dantesId) { // 召喚球のコア・各段階
							if ((Random.nextInt(99) + 1) < Config.CREATE_CHANCE_DANTES) {
								createNewItem(pc, dantesId + 1, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(158,l1iteminstance1.getName())); // \f1%0が蒸發してなくなりました。
							}
							pc.getInventory().removeItem(l1iteminstance1, 1);
							pc.getInventory().removeItem(l1iteminstance, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40964) { // ダークマジックパウダー
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						final int historybookId = l1iteminstance1.getItem().getItemId();
						if (historybookId >= 41011 && 41018 >= historybookId) {
							if ((Random.nextInt(99) + 1) <= Config.CREATE_CHANCE_HISTORY_BOOK) {
								createNewItem(pc, historybookId + 8, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(158,l1iteminstance1.getName())); // \f1%0が蒸發してなくなりました。
							}
							pc.getInventory().removeItem(l1iteminstance1, 1);
							pc.getInventory().removeItem(l1iteminstance, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}


						// 魔法卷軸
					} else if ((itemId >= 40859 && itemId <= 40898)
							&& itemId != 40863 || itemId >= 49281
							&& itemId <= 49286) { // 40863はテレポートスクロールとして處理される
						if (spellsc_objid == pc.getId()&& l1iteminstance.getItem().getUseType() != 30) { // spell_buff
							pc.sendPackets(new S_ServerMessage(281)); // \f1魔法が無效になりました。
							return;
						}
						if (spellsc_objid == 0
								&& l1iteminstance.getItem().getUseType() != 0
								&& l1iteminstance.getItem().getUseType() != 26
								&& l1iteminstance.getItem().getUseType() != 27) {
							return;
							// ターゲットがいない場合にhandleCommandsを送るとぬるぽになるためここでreturn
							// handleCommandsのほうで判斷＆處理すべき部分かもしれない
						}
						if(spellsc_objid >0){
							final L1Object obj =L1World.getInstance().findObject(spellsc_objid);
							if(obj != null && !pc.equals(obj)){
								if(obj instanceof L1PcInstance){
									if(!pc.getConfig().isMagicScroll()){
										pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
										return;
									}
								}else if(obj instanceof L1HummerInstance){//不可對打地鼠怪物使用
									return;
								}
							}
						}
						L1BuffUtil.cancelAbsoluteBarrier(pc); // アブソルート バリアの解除
						int skillid = itemId - 40858;
						switch(itemId){
						case 49281 :
							skillid =42;
							break;
						case 49282 :
							skillid = 48;
							break;
						case 49283 :
							skillid = 49;
							break;
						case 49284 :
							skillid = 52;
							break;
						case 49285 :
							skillid = 54;
							break;
						case 49286 :
							skillid = 57;
							break;
						}
						// 隱身狀態可用魔法限制
						if (pc.isInvisble() || pc.isInvisDelay()) {
							if (!this.isInvisUsableSkill(skillid)) {
								// 1003：透明狀態無法使用的魔法。
								pc.sendPackets(new S_ServerMessage(1003));
								return;
							}
						}
						final L1Skills temp = SkillsTable.getInstance().getTemplate(skillid);
						if(temp == null){
							return;
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
						L1SkillUse l1skilluse = new L1SkillUse();
						l1skilluse.handleCommands(pc, skillid,spellsc_objid, spellsc_x, spellsc_y, null, 0,L1SkillUse.TYPE_SPELLSC);

					} else if (itemId == 49017 || itemId == 49019
							|| itemId == 49021 || itemId == 49023
							|| itemId == 49025) { // 便箋(開封濟み)
						pc.sendPackets(new S_Letter(l1iteminstance));

					} else if (itemId == 40315) { // 哨子
						pc.broadcastPacketX8(new S_Sound(437));
						for (final L1NpcInstance petNpc : pc.getPetList().values()) {
							if (petNpc instanceof L1PetInstance) { // ペット
								final L1PetInstance pet = (L1PetInstance)(L1PetInstance) petNpc;
								pet.call();
							}
						}
					} else if (itemId == 40493) { // 魔法笛子
						pc.sendPacketsX8(new S_Sound(165));
						for (final L1Object visible : pc.getKnownObjects()) {
							if (visible instanceof L1GuardianInstance) {
								final L1GuardianInstance guardian = (L1GuardianInstance) visible;
								if (guardian.getNpcTemplate().get_npcId() == 70850) { // パン
									if (createNewItem(pc, 88, 1) !=null) {
										pc.getInventory().removeItem(l1iteminstance, 1);
									}
								}
							}
						}
					} else if (itemId ==610029//風神武器強化卷軸
							|| itemId ==610030	//地神武器強化卷軸
							|| itemId ==610031	//水神武器強化卷軸
							|| itemId ==610032	//火神武器強化卷軸
							|| itemId ==610033	//光神武器強化卷軸
							|| itemId ==610034	//闇神武器強化卷軸
							){
						if (l1iteminstance1 == null
								|| l1iteminstance1.getItem().getType2() != 1) {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							return;
						}
						final int safeEnchant = l1iteminstance1.getItem().get_safeenchant();
						if (safeEnchant < 0) { // 強化不可
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							return;
						}

						if (l1iteminstance1.getBless() >= 128) { // 封印された裝備強化不可
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							return;
						}

						//							pc.sendPackets(new S_ServerMessage(1410, l1iteminstance1.getLogName()));// TODO 對%附加強大的魔法力量成功。
						// 0:無屬性 1:地 2:火 4:水 8:風 5:光 6:闇 opqlo
						final int oldAttrEnchantKind = l1iteminstance1.getAttrEnchantKind();
						final int oldAttrEnchantLevel = l1iteminstance1.getAttrEnchantLevel();

						boolean isSameAttr = false; // スクロールと強化濟みの屬性が同一か
						if (itemId == 610029 && oldAttrEnchantKind == 8 
								|| itemId == 610030 && oldAttrEnchantKind == 1 
								|| itemId == 610031 && oldAttrEnchantKind == 4 
								|| itemId == 610032 && oldAttrEnchantKind == 2 
								|| itemId == 610033 && oldAttrEnchantKind == 5// opqlo 光屬性
								|| itemId == 610034 && oldAttrEnchantKind == 6// opqlo 闇屬性
								) { // 同じ屬性
							isSameAttr = true;
						}
						if (isSameAttr && oldAttrEnchantLevel >= 10) {
							pc.sendPackets(new S_ServerMessage(79)); // \f1沒有任何事情發生。//TODO
							// 屬性卷軸強化訊息錯誤修正
							return;
						}
						pc.sendPackets(new S_ServerMessage(161, l1iteminstance1.getLogName(), "$245", "$247")); // \f1%0が%2%1光ります。
						int newAttrEnchantKind = 0;
						//						int newAttrEnchantLevel = 0;
						//						if (isSameAttr) { // 同じ屬性なら+1
						//							pc.sendPackets(new S_ServerMessage(79)); // \f1沒有任何事情發生。//TODO
						//							// 屬性卷軸強化訊息錯誤修正
						//							return;
						//						} else { // 異なる屬性なら1
						//							newAttrEnchantLevel = 10;
						//						}
						switch (itemId) {
						case 610029:
							newAttrEnchantKind = 8;
							break;// 風の武器強化スクロール
						case 610030:
							newAttrEnchantKind = 1;
							break;// 地の武器強化スクロール
						case 610031:
							newAttrEnchantKind = 4;
							break; // 水の武器強化スクロール
						case 610032:
							newAttrEnchantKind = 2;
							break;// 火の武器強化スクロール
						case 610033:
							newAttrEnchantKind = 5;
							break;// opqlo 光屬性
						case 610034:
							newAttrEnchantKind = 6;
							break;// opqlo 闇屬性
						}
						l1iteminstance1.setAttrEnchantKind(newAttrEnchantKind);
						pc.getInventory().updateItem(l1iteminstance1,L1PcInventory.COL_ATTR_ENCHANT_KIND);
						pc.getInventory().saveItem(l1iteminstance1,L1PcInventory.COL_ATTR_ENCHANT_KIND);
						l1iteminstance1.setAttrEnchantLevel(10);
						pc.getInventory().updateItem(l1iteminstance1,L1PcInventory.COL_ATTR_ENCHANT_LEVEL);
						pc.getInventory().saveItem(l1iteminstance1,L1PcInventory.COL_ATTR_ENCHANT_LEVEL);
						pc.getInventory().removeItem(l1iteminstance, 1);

					} else if (itemId > 40169 && itemId < 40226 || itemId >= 45000&& itemId <= 45022) { // 魔法書
						C_SpellBooks.useSpellBook(pc, l1iteminstance, itemId);
					} else if (itemId > 40225 && itemId < 40232) {
						if (pc.isCrown() || pc.isGm()) {
							if (itemId == 40226 && pc.getLevel() >= 15) {
								C_SpellBooks.SpellBook4(pc, l1iteminstance, client);
							} else if (itemId == 40228 && pc.getLevel() >= 30) {
								C_SpellBooks.SpellBook4(pc, l1iteminstance, client);
							} else if (itemId == 40227 && pc.getLevel() >= 40) {
								C_SpellBooks.SpellBook4(pc, l1iteminstance, client);
							} else if ((itemId == 40231 || itemId == 40232)
									&& pc.getLevel() >= 45) {
								C_SpellBooks.SpellBook4(pc, l1iteminstance, client);
							} else if (itemId == 40230 && pc.getLevel() >= 50) {
								C_SpellBooks.SpellBook4(pc, l1iteminstance, client);
							} else if (itemId == 40229 && pc.getLevel() >= 55) {
								C_SpellBooks.SpellBook4(pc, l1iteminstance, client);
							} else {
								pc.sendPackets(new S_ServerMessage(312)); // LVが低くて
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId >= 40232 && itemId <= 40264 // 精靈の水晶
							|| itemId >= 41149 && itemId <= 41153) {
						C_SpellBooks.useElfSpellBook(pc, l1iteminstance, itemId);
					} else if (itemId == 49316) { //TODO 生命呼喚
						C_SpellBooks.useElfSpellBook(pc, l1iteminstance, itemId);
					} else if (itemId > 40264 && itemId < 40280) { // 闇精靈の水晶
						if (pc.isDarkelf() || pc.isGm()) {
							if (itemId >= 40265 && itemId <= 40269
									&& pc.getLevel() >= 15) {
								C_SpellBooks.SpellBook1(pc, l1iteminstance, client);
							} else if (itemId >= 40270 && itemId <= 40274
									&& pc.getLevel() >= 30) {
								C_SpellBooks.SpellBook1(pc, l1iteminstance, client);
							} else if (itemId >= 40275 && itemId <= 40279
									&& pc.getLevel() >= 45) {
								C_SpellBooks.SpellBook1(pc, l1iteminstance, client);
							} else {
								pc.sendPackets(new S_ServerMessage(312));
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // (原文:闇精靈の水晶はダークエルフのみが習得できます。)
						}
					} else if (itemId >= 40164 && itemId <= 40166 // 技術書
							|| itemId >= 41147 && itemId <= 41148) {
						if (pc.isKnight() || pc.isGm()) {
							if (itemId >= 40164 && itemId <= 40165 // スタン、リダクションアーマー
									&& pc.getLevel() >= 50) {
								C_SpellBooks.SpellBook3(pc, l1iteminstance, client);
							} else if (itemId >= 41147 && itemId <= 41148 // ソリッドキャリッジ、カウンターバリア
									&& pc.getLevel() >= 50) {
								C_SpellBooks.SpellBook3(pc, l1iteminstance, client);
							} else if (itemId == 40166 && pc.getLevel() >= 60) { // バウンスアタック
								C_SpellBooks.SpellBook3(pc, l1iteminstance, client);
							} else {
								pc.sendPackets(new S_ServerMessage(312));
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId >= 49102 && itemId <= 49116) { // ドラゴンナイトの書板
						if (pc.isDragonKnight() || pc.isGm()) {
							if (itemId >= 49102 && itemId <= 49106 // ドラゴンナイト秘技LV1
									&& pc.getLevel() >= 15) {
								C_SpellBooks.SpellBook5(pc, l1iteminstance, client);
							} else if (itemId >= 49107 && itemId <= 49111 // ドラゴンナイト秘技LV2
									&& pc.getLevel() >= 30) {
								C_SpellBooks.SpellBook5(pc, l1iteminstance, client);
							} else if (itemId >= 49112 && itemId <= 49116 // ドラゴンナイト秘技LV3
									&& pc.getLevel() >= 45) {
								C_SpellBooks.SpellBook5(pc, l1iteminstance, client);
							} else {
								pc.sendPackets(new S_ServerMessage(312));
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId >= 49117 && itemId <= 49136) { // 記憶の水晶
						if (pc.isIllusionist() || pc.isGm()) {
							if (itemId >= 49117 && itemId <= 49121 // イリュージョニスト魔法LV1
									&& pc.getLevel() >= 10) {
								C_SpellBooks.SpellBook6(pc, l1iteminstance, client);
							} else if (itemId >= 49122 && itemId <= 49126 // イリュージョニスト魔法LV2
									&& pc.getLevel() >= 20) {
								C_SpellBooks.SpellBook6(pc, l1iteminstance, client);
							} else if (itemId >= 49127 && itemId <= 49131 // イリュージョニスト魔法LV3
									&& pc.getLevel() >= 30) {
								C_SpellBooks.SpellBook6(pc, l1iteminstance, client);
							} else if (itemId >= 49132 && itemId <= 49136 // イリュージョニスト魔法LV4
									&& pc.getLevel() >= 40) {
								C_SpellBooks.SpellBook6(pc, l1iteminstance, client);
							} else {
								pc.sendPackets(new S_ServerMessage(312));
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId == 40079 || itemId == 40095) { // 掃還スクロール
						if (pc.getMap().isEscapable() || pc.isGm()) {
							final int[] loc = Getback.GetBack_Location(pc, true);
							L1Teleport.teleport(pc, loc[0], loc[1], (short) loc[2],5, true);
							pc.getInventory().removeItem(l1iteminstance, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(647));
							// pc.sendPackets(new
							// S_CharVisualUpdate(pc));
						}
						L1BuffUtil.cancelAbsoluteBarrier(pc); // アブソルート バリアの解除
					} else if (itemId == 40124) { // 血盟掃還スクロール
						if (pc.getMap().isEscapable() || pc.isGm()) {
							int castle_id = 0;
							int house_id = 0;
							if (pc.getClanid() != 0) { // クラン所屬
								L1Clan clan = WorldClan.get().getClan(pc.getClanname());
								if (clan != null) {
									castle_id = clan.getCastleId();
									house_id = clan.getHouseId();
								}
							}
							if (castle_id != 0) { // 城主クラン員
								if (pc.getMap().isEscapable() || pc.isGm()) {
									int[] loc = new int[3];
									loc = L1CastleLocation.getCastleLoc(castle_id);
									final int locx = loc[0];
									final int locy = loc[1];
									final short mapid = (short) (loc[2]);
									L1Teleport.teleport(pc, locx, locy, mapid, 5,true);
									pc.getInventory().removeItem(l1iteminstance, 1);
								} else {
									pc.sendPackets(new S_ServerMessage(647));
								}
							} else if (house_id != 0) { // アジト所有クラン員
								if (pc.getMap().isEscapable() || pc.isGm()) {
									int[] loc = new int[3];
									loc = L1HouseLocation.getHouseLoc(house_id);
									final int locx = loc[0];
									final int locy = loc[1];
									final 	short mapid = (short) (loc[2]);
									L1Teleport.teleport(pc, locx, locy, mapid, 5,true);
									pc.getInventory().removeItem(l1iteminstance, 1);
								} else {
									pc.sendPackets(new S_ServerMessage(647));
								}
							} else {
								if (pc.getHomeTownId() > 0) {
									final int[] loc = L1TownLocation.getGetBackLoc(pc.getHomeTownId());
									final int locx = loc[0];
									final int locy = loc[1];
									short mapid = (short) (loc[2]);
									L1Teleport.teleport(pc, locx, locy, mapid, 5,true);
									pc.getInventory().removeItem(l1iteminstance, 1);
								} else {
									int[] loc = Getback.GetBack_Location(pc, true);
									L1Teleport.teleport(pc, loc[0], loc[1],(short) loc[2], 5, true);
									pc.getInventory().removeItem(l1iteminstance, 1);
								}
							}
						} else {
							pc.sendPackets(new S_ServerMessage(647));
						}
						L1BuffUtil.cancelAbsoluteBarrier(pc); // アブソルート バリアの解除

					} else if (itemId == 240100) { // 咒われたテレポートスクロール(オリジナルアイテム)
						L1Teleport.teleport(pc, pc.getX(), pc.getY(),pc.getMapId(), pc.getHeading(), true);
						pc.getInventory().removeItem(l1iteminstance, 1);
						L1BuffUtil.cancelAbsoluteBarrier(pc); // アブソルート バリアの解除
					} else if (itemId >= 40901 && itemId <= 40908) { // 各種エンゲージリング
						L1PcInstance partner = null;
						boolean partner_stat = false;
						if (pc.getPartnerId() != 0) { // 結婚中
							partner = (L1PcInstance) L1World.getInstance().findObject(pc.getPartnerId());
							if (partner != null && partner.getPartnerId() != 0
									&& pc.getPartnerId() == partner.getId()
									&& partner.getPartnerId() == pc.getId()) {
								partner_stat = true;
							}
						} else {
							pc.sendPackets(new S_ServerMessage(662)); // \f1あなたは結婚していません。
							return;
						}

						if (partner_stat) {
							boolean castle_area = L1CastleLocation.checkInAllWarArea(partner.getX(), partner.getY(),partner.getMapId());// いずれかの城エリア
							if ((partner.getMapId() == 0 || partner.getMapId() == 4 || partner.getMapId() == 304) && castle_area == false) {
								L1Teleport.teleport(pc, partner.getX(),
										partner.getY(), partner.getMapId(),5, true);
							} else {
								pc.sendPackets(new S_ServerMessage(547)); // \f1あなたのパートナーは今あなたが行けない所でプレイ中です。
							}
						} else {
							pc.sendPackets(new S_ServerMessage(546)); // \f1あなたのパートナーは今プレイをしていません。
						}
					} else if (itemId == 40555) { // 秘密の部屋のキー
						if (pc.isKnight()
								&& (pc.getX() >= 32806 && // オリム部屋
								pc.getX() <= 32814)
								&& (pc.getY() >= 32798 && pc.getY() <= 32807)
								&& pc.getMapId() == 13) {
							short mapid = 13;
							L1Teleport.teleport(pc, 32815, 32810, mapid, 5, false);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40417) { // ソウルクリスタル
						if ((pc.getX() >= 32665 && // 海賊島
								pc.getX() <= 32674)
								&& (pc.getY() >= 32976 && pc.getY() <= 32985)
								&& pc.getMapId() == 440) {
							short mapid = 430;
							L1Teleport.teleport(pc, 32922, 32812, mapid, 5, true);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40566) { // ミステリアス シェル
						if (pc.isElf()
								&& (pc.getX() >= 33971 && // 象牙の塔の村の南にある魔方陣の座標
								pc.getX() <= 33975)
								&& (pc.getY() >= 32324 && pc.getY() <= 32328)
								&& pc.getMapId() == 4
								&& !pc.getInventory().checkItem(40548)) { // 亡靈の袋
							boolean found = false;
							for (L1Object obj : L1World.getInstance().getObject()) {
								if (obj instanceof L1MonsterInstance) {
									L1MonsterInstance mob = (L1MonsterInstance) obj;
									if (mob != null) {
										if (mob.getNpcTemplate().get_npcId() == 45300) {
											found = true;
											break;
										}
									}
								}
							}
							if (found) {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							} else {
								L1SpawnUtil.spawn(pc, 45300, 0, 0); // 古代人の亡靈
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40557) { // 暗殺リスト(グルーディン)
						if (pc.getX() == 32620 && pc.getY() == 32641
								&& pc.getMapId() == 4) {
							for (L1Object object : L1World.getInstance().getObject()) {
								if (object instanceof L1NpcInstance) {
									L1NpcInstance npc = (L1NpcInstance) object;
									if (npc.getNpcTemplate().get_npcId() == 45883) {
										pc.sendPackets(new S_ServerMessage(79));
										return;
									}
								}
							}
							L1SpawnUtil.spawn(pc, 45883, 0, 300000);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40563) { // 暗殺リスト(火田村)
						if (pc.getX() == 32730 && pc.getY() == 32426
								&& pc.getMapId() == 4) {
							for (L1Object object : L1World.getInstance()
									.getObject()) {
								if (object instanceof L1NpcInstance) {
									L1NpcInstance npc = (L1NpcInstance) object;
									if (npc.getNpcTemplate().get_npcId() == 45884) {
										pc.sendPackets(new S_ServerMessage(79));
										return;
									}
								}
							}
							L1SpawnUtil.spawn(pc, 45884, 0, 300000);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40561) { // 暗殺リスト(ケント)
						if (pc.getX() == 33046 && pc.getY() == 32806
								&& pc.getMapId() == 4) {
							for (L1Object object : L1World.getInstance()
									.getObject()) {
								if (object instanceof L1NpcInstance) {
									L1NpcInstance npc = (L1NpcInstance) object;
									if (npc.getNpcTemplate().get_npcId() == 45885) {
										pc.sendPackets(new S_ServerMessage(79));
										return;
									}
								}
							}
							L1SpawnUtil.spawn(pc, 45885, 0, 300000);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40560) { // 暗殺リスト(ウッドベック)
						if (pc.getX() == 32580 && pc.getY() == 33260
								&& pc.getMapId() == 4) {
							for (L1Object object : L1World.getInstance().getObject()) {
								if (object instanceof L1NpcInstance) {
									L1NpcInstance npc = (L1NpcInstance) object;
									if (npc.getNpcTemplate().get_npcId() == 45886) {
										pc.sendPackets(new S_ServerMessage(79));
										return;
									}
								}
							}
							L1SpawnUtil.spawn(pc, 45886, 0, 300000);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40562) { // 暗殺リスト(ハイネ)
						if (pc.getX() == 33447 && pc.getY() == 33476
								&& pc.getMapId() == 4) {
							for (L1Object object : L1World.getInstance()
									.getObject()) {
								if (object instanceof L1NpcInstance) {
									L1NpcInstance npc = (L1NpcInstance) object;
									if (npc.getNpcTemplate().get_npcId() == 45887) {
										pc.sendPackets(new S_ServerMessage(79));
										return;
									}
								}
							}
							L1SpawnUtil.spawn(pc, 45887, 0, 300000);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40559) { // 暗殺リスト(アデン)
						if (pc.getX() == 34215 && pc.getY() == 33195
								&& pc.getMapId() == 4) {
							for (L1Object object : L1World.getInstance()
									.getObject()) {
								if (object instanceof L1NpcInstance) {
									L1NpcInstance npc = (L1NpcInstance) object;
									if (npc.getNpcTemplate().get_npcId() == 45888) {
										pc.sendPackets(new S_ServerMessage(79));
										return;
									}
								}
							}
							L1SpawnUtil.spawn(pc, 45888, 0, 300000);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40558) { // 暗殺リスト(ギラン)
						if (pc.getX() == 33513 && pc.getY() == 32890
								&& pc.getMapId() == 4) {
							for (L1Object object : L1World.getInstance().getObject()) {
								if (object instanceof L1NpcInstance) {
									L1NpcInstance npc = (L1NpcInstance) object;
									if (npc.getNpcTemplate().get_npcId() == 45889) {
										pc.sendPackets(new S_ServerMessage(79));
										return;
									}
								}
							}
							L1SpawnUtil.spawn(pc, 45889, 0, 300000);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 40572) { // アサシンの印
						if (pc.getX() == 32778 && pc.getY() == 32738
								&& pc.getMapId() == 21) {
							L1Teleport.teleport(pc, 32781, 32728, (short) 21, 5,
									true);
						} else if (pc.getX() == 32781 && pc.getY() == 32728
								&& pc.getMapId() == 21) {
							L1Teleport.teleport(pc, 32778, 32738, (short) 21, 5,
									true);
						} else {
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId == 40006 || itemId == 40412
							|| itemId == 140006) { // パインワンド
						if (pc.getMap().isUsePainwand()) {
							S_AttackPacket s_attackPacket = new S_AttackPacket(pc,0, ActionCodes.ACTION_Wand);
							pc.sendPackets(s_attackPacket);
							pc.broadcastPacketAll(s_attackPacket);
							final int chargeCount = l1iteminstance.getChargeCount();
							if (chargeCount <= 0 && itemId != 40412) {// \f1何も起きませんでした。
								pc.sendPackets(new S_ServerMessage(79));
								return;
							}
							final int[] mobArray = { 45008, 45140, 45016, 45021, 45025,
									45033, 45099, 45147, 45123, 45130, 45046,
									45092, 45138, 45098, 45127, 45143, 45149,
									45171, 45040, 45155, 45192, 45173, 45213,
									45079, 45144 };
							// ゴブリン・ホブコブリン・コボルト・鹿・グレムリン
							// インプ・インプエルダー・オウルベア・スケルトンアーチャー・スケルトンアックス
							// ビーグル・ドワーフウォーリアー・オークスカウト・ガンジオーク・ロバオーク
							// ドゥダーマラオーク・アトゥバオーク・ネルガオーク・ベアー・トロッグ
							// ラットマン・ライカンスロープ・ガースト・ノール・リザードマン
							/*
							 * 45005, 45008, 45009, 45016, 45019, 45043, 45060,
							 * 45066, 45068, 45082, 45093, 45101, 45107, 45126,
							 * 45129, 45136, 45144, 45157, 45161, 45173, 45184,
							 * 45223 }; // カエル、ゴブリン、オーク、コボルド、 // オーク
							 * アーチャー、ウルフ、スライム、ゾンビ、 // フローティングアイ、オーク ファイター、 // ウェア
							 * ウルフ、アリゲーター、スケルトン、 // ストーン ゴーレム、スケルトン アーチャー、 // ジャイアント
							 * スパイダー、リザードマン、グール、 // スパルトイ、ライカンスロープ、ドレッド スパイダー、 //
							 * バグベアー
							 */
							final int rnd = Random.nextInt(mobArray.length);
							L1SpawnUtil.spawn(pc, mobArray[rnd], 0, 300000);
							if (itemId == 40006 || itemId == 140006) {
								l1iteminstance.setChargeCount(l1iteminstance
										.getChargeCount() - 1);
								pc.getInventory().updateItem(l1iteminstance,L1PcInventory.COL_CHARGE_COUNT);
							} else {
								pc.getInventory().removeItem(l1iteminstance, 1);
							}
						} else {
							// \f1何も起きませんでした。
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId == 40007) { // エボニー ワンド
						L1BuffUtil.cancelAbsoluteBarrier(pc); // アブソルート バリアの解除
						int chargeCount = l1iteminstance.getChargeCount();
						if (chargeCount <= 0) {
							// \f1何も起きませんでした。
							pc.sendPackets(new S_ServerMessage(79));
							return;
						}
						L1Object target = L1World.getInstance().findObject(spellsc_objid);
						pc.sendPackets(new S_UseAttackSkill(pc, spellsc_objid, 10,
								spellsc_x, spellsc_y, ActionCodes.ACTION_Wand));
						pc.broadcastPacketAll(new S_UseAttackSkill(pc, spellsc_objid,
								10, spellsc_x, spellsc_y, ActionCodes.ACTION_Wand));
						if (target != null) {
							doWandAction(pc, target);
						}
						l1iteminstance.setChargeCount(l1iteminstance.getChargeCount() - 1);
						pc.getInventory().updateItem(l1iteminstance,L1PcInventory.COL_CHARGE_COUNT);
					} else if (itemId == 40008 || itemId == 40410
							|| itemId == 140008) { // メイプルワンド
						if (pc.getMapId() == 63 || pc.getMapId() == 552
								|| pc.getMapId() == 555 || pc.getMapId() == 557
								|| pc.getMapId() == 558 || pc.getMapId() == 779) { // 水中では使用不可
							pc.sendPackets(new S_ServerMessage(563)); // \f1ここでは使えません。
						} else {
							pc.sendPacketsAll(new S_AttackPacket(pc, 0,ActionCodes.ACTION_Wand));
							int chargeCount = l1iteminstance.getChargeCount();
							if (chargeCount <= 0 && itemId != 40410
									|| pc.getTempCharGfx() == 6034
									|| pc.getTempCharGfx() == 6035) {
								// \f1何も起きませんでした。
								pc.sendPackets(new S_ServerMessage(79));
								return;
							}
							L1Object target = L1World.getInstance().findObject(spellsc_objid);
							if (target != null) {
								if(!(target instanceof L1Character)){
									return;
								}
								L1Character cha = (L1Character) target;
								C_PolyMorph.polyAction(pc, cha);
								L1BuffUtil.cancelAbsoluteBarrier(pc); // アブソルート バリアの解除
								if (itemId == 40008 || itemId == 140008) {
									l1iteminstance.setChargeCount(l1iteminstance.getChargeCount() - 1);
									pc.getInventory().updateItem(l1iteminstance,L1PcInventory.COL_CHARGE_COUNT);
								} else {
									pc.getInventory().removeItem(l1iteminstance, 1);
								}
							} else {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							}
						}
						// if (pc.getId() == target.getId()) { // ターゲットが自分
						// ;
						// } else if (target instanceof L1PcInstance) { // ターゲットがPC
						// L1PcInstance targetpc = (L1PcInstance) target;
						// if (pc.getClanid() != 0
						// && pc.getClanid() == targetpc.getClanid()) { //
						// ターゲットが同じクラン
						// ;
						// }
						// } else { // その他（NPCや他のクランのPC）
						// }
					} else if (itemId >= 40289 && itemId <= 40297) { // 傲慢の塔11~91階テレポートアミュレット
						useToiTeleportAmulet(pc, itemId, l1iteminstance);
					} else if (itemId >= 40280 && itemId <= 40288) {
						// 封印された傲慢の塔11～91階テレポートアミュレット
						pc.getInventory().removeItem(l1iteminstance, 1);
						L1ItemInstance item = pc.getInventory().storeItem(
								itemId + 9, 1);
						if (item != null) {
							pc.sendPackets(new S_ServerMessage(403, item.getLogName()));
						}
						/*} else if (itemId == 40070) { // 進化の實
						pc.sendPackets(new S_ServerMessage(76, l1iteminstance.getLogName()));
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41301) { //發紅光的魚
						int chance = Random.nextInt(10);
						if (chance >= 0 && chance < 5) {
							C_Potion.UseHeallingPotion(pc, 15, 189);
						} else if (chance >= 5 && chance < 9) {
							createNewItem(pc, 40019, 1);
						} else if (chance >= 9) {
							int gemChance = Random.nextInt(3);
							if (gemChance == 0) {
								createNewItem(pc, 40045, 1);
							} else if (gemChance == 1) {
								createNewItem(pc, 40049, 1);
							} else if (gemChance == 2) {
								createNewItem(pc, 40053, 1);
							}
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41302) { // シャイニンググリーンフィッシュ
						int chance = Random.nextInt(3);
						if (chance >= 0 && chance < 5) {C_Potion.UseHeallingPotion(pc, 15, 189);
						} else if (chance >= 5 && chance < 9) {
							createNewItem(pc, 40018, 1);
						} else if (chance >= 9) {
							int gemChance = Random.nextInt(3);
							if (gemChance == 0) {createNewItem(pc, 40047, 1);
							} else if (gemChance == 1) {createNewItem(pc, 40051, 1);
							} else if (gemChance == 2) {createNewItem(pc, 40055, 1);
							}
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41303) { // シャイニングブルーフィッシュ
						int chance = Random.nextInt(3);
						if (chance >= 0 && chance < 5) {C_Potion.UseHeallingPotion(pc, 15, 189);
						} else if (chance >= 5 && chance < 9) {createNewItem(pc, 40015, 1);
						} else if (chance >= 9) {
							int gemChance = Random.nextInt(3);
							if (gemChance == 0) {createNewItem(pc, 40046, 1);
							} else if (gemChance == 1) {createNewItem(pc, 40050, 1);
							} else if (gemChance == 2) {createNewItem(pc, 40054, 1);
							}
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41304) { // シャイニングホワイトフィッシュ
						int chance = Random.nextInt(3);
						if (chance >= 0 && chance < 5) {C_Potion.UseHeallingPotion(pc, 15, 189);
						} else if (chance >= 5 && chance < 9) {createNewItem(pc, 40021, 1);
						} else if (chance >= 9) {
							int gemChance = Random.nextInt(3);
							if (gemChance == 0) {createNewItem(pc, 40044, 1);
							} else if (gemChance == 1) {createNewItem(pc, 40048, 1);
							} else if (gemChance == 2) {createNewItem(pc, 40052, 1);
							}
						}
						pc.getInventory().removeItem(l1iteminstance, 1);*/
					} else if (itemId >= 40136 && itemId <= 40161) { // 花火
						int soundid = 3198;
						if (itemId == 40154) {
							soundid = 3198;
						} else if (itemId == 40152) {
							soundid = 2031;
						} else if (itemId == 40141) {
							soundid = 2028;
						} else if (itemId == 40160) {
							soundid = 2030;
						} else if (itemId == 40145) {
							soundid = 2029;
						} else if (itemId == 40159) {
							soundid = 2033;
						} else if (itemId == 40151) {
							soundid = 2032;
						} else if (itemId == 40161) {
							soundid = 2037;
						} else if (itemId == 40142) {
							soundid = 2036;
						} else if (itemId == 40146) {
							soundid = 2039;
						} else if (itemId == 40148) {
							soundid = 2043;
						} else if (itemId == 40143) {
							soundid = 2041;
						} else if (itemId == 40156) {
							soundid = 2042;
						} else if (itemId == 40139) {
							soundid = 2040;
						} else if (itemId == 40137) {
							soundid = 2047;
						} else if (itemId == 40136) {
							soundid = 2046;
						} else if (itemId == 40138) {
							soundid = 2048;
						} else if (itemId == 40140) {
							soundid = 2051;
						} else if (itemId == 40144) {
							soundid = 2053;
						} else if (itemId == 40147) {
							soundid = 2045;
						} else if (itemId == 40149) {
							soundid = 2034;
						} else if (itemId == 40150) {
							soundid = 2055;
						} else if (itemId == 40153) {
							soundid = 2038;
						} else if (itemId == 40155) {
							soundid = 2044;
						} else if (itemId == 40157) {
							soundid = 2035;
						} else if (itemId == 40158) {
							soundid = 2049;
						} else {
							soundid = 3198;
						}
						pc.sendPacketsX10(new S_SkillSound(pc.getId(),soundid));
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId >= 41357 && itemId <= 41382) { // アルファベット花火
						//						int soundid = itemId - 34946;
						int soundid = 3198;
						pc.sendPacketsX10(new S_SkillSound(pc.getId(),soundid));
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 40615) { // 影の神殿2階の鍵
						if ((pc.getX() >= 32701 && pc.getX() <= 32705)
								&& (pc.getY() >= 32894 && pc.getY() <= 32898)
								&& pc.getMapId() == 522) { // 影の神殿1F
							L1Teleport.teleport(pc, ((L1EtcItem) l1iteminstance.getItem()).get_locx(),
									((L1EtcItem) l1iteminstance.getItem()).get_locy(),
									((L1EtcItem) l1iteminstance.getItem()).get_mapid(), 5, true);
						} else {
							// \f1何も起きませんでした。
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId == 40616 || itemId == 40782
							|| itemId == 40783) { // 影の神殿3階の鍵
						if ((pc.getX() >= 32698 && pc.getX() <= 32702)
								&& (pc.getY() >= 32894 && pc.getY() <= 32898)
								&& pc.getMapId() == 523) { // 影の神殿2階
							L1Teleport.teleport(pc, ((L1EtcItem) l1iteminstance.getItem()).get_locx(),
									((L1EtcItem) l1iteminstance.getItem()).get_locy(),
									((L1EtcItem) l1iteminstance.getItem()).get_mapid(), 5, true);
						} else {
							// \f1何も起きませんでした。
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId == 40692) { // 完成された寶の地圖
						if (pc.getInventory().checkItem(40621)) {
							// \f1何も起きませんでした。
							pc.sendPackets(new S_ServerMessage(79));
						} else if ((pc.getX() >= 32856 && pc.getX() <= 32858)
								&& (pc.getY() >= 32857 && pc.getY() <= 32858)
								&& pc.getMapId() == 443) { // 海賊島のダンジョン３階
							L1Teleport.teleport(pc, ((L1EtcItem) l1iteminstance.getItem()).get_locx(),
									((L1EtcItem) l1iteminstance.getItem()).get_locy(),
									((L1EtcItem) l1iteminstance.getItem()).get_mapid(), 5, true);
						} else {
							// \f1何も起きませんでした。
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId == 41146) { // ドロモンドの招待狀
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei001"));
					} else if (itemId == 40641) { // トーキングスクロール
						if (Config.ALT_TALKINGSCROLLQUEST == true) {
							if (pc.getQuest().get_step(L1Quest.QUEST_TOSCROLL) == 0) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrolla"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 1) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollb"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 2) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollc"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 3) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrolld"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 4) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrolle"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 5) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollf"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 6) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollg"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 7) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollh"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 8) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrolli"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 9) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollj"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 10) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollk"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 11) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrolll"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 12) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollm"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 13) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrolln"));
							} else if (pc.getQuest().get_step(
									L1Quest.QUEST_TOSCROLL) == 255) {
								pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollo"));
							}
						} else {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"tscrollp"));
						}

					} else if (itemId == 41209) { // ポピレアの依賴書 
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei002"));
					} else if (itemId == 41210) { // 研磨材
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei003"));
					} else if (itemId == 41211) { // ハーブ
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei004"));
					} else if (itemId == 41212) { // 特製キャンディー
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei005"));
					} else if (itemId == 41213) { // ティミーのバスケット
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei006"));
					} else if (itemId == 41214) { // 運の證
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei012"));
					} else if (itemId == 41215) { // 知の證
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei010"));
					} else if (itemId == 41216) { // 力の證
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei011"));
					} else if (itemId == 41222) { // マシュル
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei008"));
					} else if (itemId == 41223) { // 武具の破片
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei007"));
					} else if (itemId == 41224) { // バッジ
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei009"));
					} else if (itemId == 41225) { // ケスキンの發注書
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei013"));
					} else if (itemId == 41226) { // パゴの藥
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei014"));
					} else if (itemId == 41227) { // アレックスの紹介狀
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei033"));
					} else if (itemId == 41228) { // ラビのお守り
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei034"));
					} else if (itemId == 41229) { // スケルトンの頭
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei025"));
					} else if (itemId == 41230) { // ジーナンへの手紙
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei020"));
					} else if (itemId == 41231) { // マッティへの手紙
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei021"));
					} else if (itemId == 41233) { // ケーイへの手紙
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei019"));
					} else if (itemId == 41234) { // 骨の入った袋
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei023"));
					} else if (itemId == 41235) { // 材料表
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei024"));
					} else if (itemId == 41236) { // ボーンアーチャーの骨
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei026"));
					} else if (itemId == 41237) { // スケルトンスパイクの骨
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei027"));
					} else if (itemId == 41239) { // ヴートへの手紙
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei018"));
					} else if (itemId == 41240) { // フェーダへの手紙
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei022"));
					} else if (itemId == 41060) { // ノナメの推薦書
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "nonames"));
					} else if (itemId == 41061) { // 調查團の證書：エルフ地域ドゥダ-マラカメ
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "kames"));
					} else if (itemId == 41062) { // 調查團の證書：人間地域ネルガバクモ
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "bakumos"));
					} else if (itemId == 41063) { // 調查團の證書：精靈地域ドゥダ-マラブカ
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "bukas"));
					} else if (itemId == 41064) { // 調查團の證書：オーク地域ネルガフウモ
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "huwoomos"));
					} else if (itemId == 41065) { // 調查團の證書：調查團長アトゥバノア
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "noas"));
					} else if (itemId == 41356) { // パルームの資源リスト
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "rparum3"));
					} else if (itemId == 40701) { // 小さな寶の地圖
						if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 1) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"firsttmap"));
						} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 2) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"secondtmapa"));
						} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 3) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"secondtmapb"));
						} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 4) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"secondtmapc"));
						} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 5) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"thirdtmapd"));
						} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 6) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"thirdtmape"));
						} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 7) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"thirdtmapf"));
						} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 8) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"thirdtmapg"));
						} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 9) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"thirdtmaph"));
						} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 10) {
							pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"thirdtmapi"));
						}
					} else if (itemId == 40663) { // 息子の手紙
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "sonsletter"));
					} else if (itemId == 40630) { // ディエゴの古い日記
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "diegodiary"));
					} else if (itemId == 41340) { // 傭兵團長 ティオンの紹介狀
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "tion"));
					} else if (itemId == 41317) { // ラルソンの推薦狀
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "rarson"));
					} else if (itemId == 41318) { // クエンのメモ
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "kuen"));
					} else if (itemId == 41329) { // 剝制の製作依賴書
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "anirequest"));
					} else if (itemId == 41346) { // ロビンフッドのメモ1
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"robinscroll"));
					} else if (itemId == 41347) { // ロビンフッドのメモ2
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"robinscroll2"));
					} else if (itemId == 41348) { // ロビンフッドの紹介狀
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "robinhood"));
					} else if (itemId == 41007) { // イリスの命令書：靈魂の安息
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "erisscroll"));
					} else if (itemId == 41009) { // イリスの命令書：同盟の意志
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"erisscroll2"));
					} else if (itemId == 41019) { // ラスタバド歷史書１章
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"lashistory1"));
					} else if (itemId == 41020) { // ラスタバド歷史書２章
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"lashistory2"));
					} else if (itemId == 41021) { // ラスタバド歷史書３章
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"lashistory3"));
					} else if (itemId == 41022) { // ラスタバド歷史書４章
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"lashistory4"));
					} else if (itemId == 41023) { // ラスタバド歷史書５章
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"lashistory5"));
					} else if (itemId == 41024) { // ラスタバド歷史書６章
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"lashistory6"));
					} else if (itemId == 41025) { // ラスタバド歷史書７章
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"lashistory7"));
					} else if (itemId == 41026) { // ラスタバド歷史書８章
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),"lashistory8"));
					} else if (itemId == 41208) { // 散りゆく魂
						if ((pc.getX() >= 32844 && pc.getX() <= 32845)
								&& (pc.getY() >= 32693 && pc.getY() <= 32694)
								&& pc.getMapId() == 550) { // 船の墓場:地上層
							L1Teleport.teleport(pc, ((L1EtcItem) l1iteminstance.getItem()).get_locx(),
									((L1EtcItem) l1iteminstance.getItem()).get_locy(),
									((L1EtcItem) l1iteminstance.getItem()).get_mapid(), 5, true);
						} else {
							// \f1何も起きませんでした。
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId == 40700) { // シルバーフルート
						pc.sendPackets(new S_Sound(10));
						pc.broadcastPacketAll(new S_Sound(10));
						if ((pc.getX() >= 32619 && pc.getX() <= 32623)
								&& (pc.getY() >= 33120 && pc.getY() <= 33124)
								&& pc.getMapId() == 440) { // 海賊島前半魔方陣座標
							boolean found = false;
							for (L1Object obj : L1World.getInstance().getObject()) {
								if (obj instanceof L1MonsterInstance) {
									L1MonsterInstance mob = (L1MonsterInstance) obj;
									if (mob != null) {
										if (mob.getNpcTemplate().get_npcId() == 45875) {
											found = true;
											break;
										}
									}
								}
							}
							if (found) {
							} else {
								L1SpawnUtil.spawn(pc, 45875, 0, 0); // ラバーボーンヘッド
							}
						}
					} else if (itemId == 41121) { // カヘルの契約書
						if (pc.getQuest().get_step(L1Quest.QUEST_SHADOWS) == L1Quest.QUEST_END
								|| pc.getInventory().checkItem(41122, 1)) {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						} else {
							createNewItem(pc, 41122, 1);
						}
					} else if (itemId == 41130) { // 血痕の契約書
						if (pc.getQuest().get_step(L1Quest.QUEST_DESIRE) == L1Quest.QUEST_END
								|| pc.getInventory().checkItem(41131, 1)) {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						} else {
							createNewItem(pc, 41131, 1);
						}
					} else if (itemId == 42501) { // ストームウォーク
						if (pc.getCurrentMp() < 10) {
							pc.sendPackets(new S_ServerMessage(278)); // \f1MPが不足していて魔法を使うことができません。
							return;
						}
						pc.setCurrentMp(pc.getCurrentMp() - 10);
						// pc.sendPackets(new S_CantMove()); // テレポート後に移動不可能になる場合がある
						L1Teleport.teleport(pc, spellsc_x, spellsc_y,
								pc.getMapId(), pc.getHeading(), true,
								L1Teleport.CHANGE_POSITION);

					} else if (itemId == 41245) { // 溶解劑
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						useResolvent(pc, l1iteminstance1, l1iteminstance);

						//TODO 魔法娃娃DB化
					} else if (itemId >= 41255 && itemId <= 41259) { // 料理の本
						if (cookStatus == 0) {
							pc.sendPackets(new S_PacketBox(S_PacketBox.COOK_WINDOW,
									(itemId - 41255)));
						} else {
							C_MakeCook.makeCooking(pc, cookNo);
						}
					} else if (itemId == 41260) { // 薪
						for (L1Object object : L1World.getInstance()
								.getVisibleObjects(pc, 3)) {
							if (object instanceof L1EffectInstance) {
								if (((L1NpcInstance) object).getNpcTemplate().get_npcId() == 81170) {
									// すでに周圍に焚き火があります。
									pc.sendPackets(new S_ServerMessage(1162));
									return;
								}
							}
						}
						int[] loc = new int[2];
						loc = pc.getFrontLoc();
						L1EffectSpawn.getInstance().spawnEffect(81170, 600000,
								loc[0], loc[1], pc.getMapId(),pc);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId >= 41277 && itemId <= 41292
							|| itemId >= 49049 && itemId <= 49064
							|| itemId >= 49244 && itemId <= 49259) { // 料理
						L1Cooking.useCookingItem(pc, l1iteminstance);


					} else if (itemId == 41401) { // 傢俱除去ワンド
						useFurnitureRemovalWand(pc, spellsc_objid, l1iteminstance);


					} else if (itemId == 41345) { // 酸性の乳液
						L1DamagePoison.doInfection(pc, pc, 3000, 5, false);
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41315) { // 聖水
						if (pc.hasSkillEffect(STATUS_HOLY_WATER_OF_EVA)) {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							return;
						}
						if (pc.hasSkillEffect(STATUS_HOLY_MITHRIL_POWDER)) {
							pc.removeSkillEffect(STATUS_HOLY_MITHRIL_POWDER);
						}
						pc.setSkillEffect(STATUS_HOLY_WATER, 900 * 1000);
						pc.sendPacketsX8(new S_SkillSound(pc.getId(), 190));
						pc.sendPackets(new S_ServerMessage(1141));
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41316) { // 神聖なミスリル パウダー
						if (pc.hasSkillEffect(STATUS_HOLY_WATER_OF_EVA)) {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							return;
						}
						if (pc.hasSkillEffect(STATUS_HOLY_WATER)) {
							pc.removeSkillEffect(STATUS_HOLY_WATER);
						}
						pc.setSkillEffect(STATUS_HOLY_MITHRIL_POWDER, 900 * 1000);
						pc.sendPacketsX8(new S_SkillSound(pc.getId(), 190));
						pc.sendPackets(new S_ServerMessage(1142));
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 41354) { // 神聖なエヴァの水
						if (pc.hasSkillEffect(STATUS_HOLY_WATER)
								|| pc.hasSkillEffect(STATUS_HOLY_MITHRIL_POWDER)) {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							return;
						}
						pc.setSkillEffect(STATUS_HOLY_WATER_OF_EVA, 900 * 1000);
						pc.sendPacketsX8(new S_SkillSound(pc.getId(), 190));
						pc.sendPackets(new S_ServerMessage(1140));
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 49092) { // 歪みのコア
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						int targetItemId = l1iteminstance1.getItem().getItemId();
						if (targetItemId == 49095 || targetItemId == 49099) { // 閉ざされた寶箱
							createNewItem(pc, targetItemId + 1, 1);
							pc.getInventory().consumeItem(targetItemId, 1);
							pc.getInventory().consumeItem(49092, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							return;
						}
					} else if (itemId == 49093) { // 下級オシリスの寶箱の欠片：上
						if (pc.getInventory().checkItem(49094, 1)) {
							pc.getInventory().consumeItem(49093, 1);
							pc.getInventory().consumeItem(49094, 1);
							createNewItem(pc, 49095, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 49094) { // 下級オシリスの寶箱の欠片：下
						if (pc.getInventory().checkItem(49093, 1)) {
							pc.getInventory().consumeItem(49093, 1);
							pc.getInventory().consumeItem(49094, 1);
							createNewItem(pc, 49095, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 49097) { // 上級オシリスの寶箱の欠片：上
						if (pc.getInventory().checkItem(49098, 1)) {
							pc.getInventory().consumeItem(49097, 1);
							pc.getInventory().consumeItem(49098, 1);
							createNewItem(pc, 49099, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 49098) { // 上級オシリスの寶箱の欠片：下
						if (pc.getInventory().checkItem(49097, 1)) {
							pc.getInventory().consumeItem(49097, 1);
							pc.getInventory().consumeItem(49098, 1);
							createNewItem(pc, 49099, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 41426) { // 封印卷軸
						L1ItemInstance lockItem = pc.getInventory().getItem(l);
						// int lockItemId = lockItem.getItem().getItemId();
						final int type2 =lockItem.getItem().getType2();
						if (lockItem != null && type2 == 1
								|| type2 == 2
								|| type2 == 0 
								&& lockItem.getItem().isCanSeal()//&& !lockItem.getItem().isTradable()
								) {
							if(l1iteminstance1 == null){
								//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
								return;
							}
							if(!l1iteminstance1.getItem().isTradable()){
								pc.sendPackets(new S_SystemMessage("此道具無法轉移，沒有必要封印。"));
								return;
							}
							if (lockItem.getBless() == 0
									|| lockItem.getBless() == 1
									|| lockItem.getBless() == 2
									|| lockItem.getBless() == 3) {
								int bless = 1;
								switch (lockItem.getBless()) {
								case 0:
									bless = 128;
									break;
								case 1:
									bless = 129;
									break;
								case 2:
									bless = 130;
									break;
								case 3:
									bless = 131;
									break;
								}
								lockItem.setBless(bless);
								pc.getInventory().updateItem(lockItem,L1PcInventory.COL_BLESS);
								pc.getInventory().saveItem(lockItem,L1PcInventory.COL_BLESS);
								pc.getInventory().removeItem(l1iteminstance, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 41427) { // 封印解除卷軸
						L1ItemInstance lockItem = pc.getInventory().getItem(l);
						// int lockItemId = lockItem.getItem().getItemId();
						final int type2 =lockItem.getItem().getType2();
						if (lockItem != null && type2 == 1
								|| type2 == 2
								|| type2 == 0 
								&& lockItem.getItem().isCanSeal()//&& !lockItem.getItem().isTradable()
								) {
							if (lockItem.getBless() == 128
									|| lockItem.getBless() == 129
									|| lockItem.getBless() == 130
									|| lockItem.getBless() == 131) {
								int bless = 1;
								switch (lockItem.getBless()) {
								case 128:
									bless = 0;
									break;
								case 129:
									bless = 1;
									break;
								case 130:
									bless = 2;
									break;
								case 131:
									bless = 3;
									break;
								}
								lockItem.setBless(bless);
								pc.getInventory().updateItem(lockItem,L1PcInventory.COL_BLESS);
								pc.getInventory().saveItem(lockItem,L1PcInventory.COL_BLESS);
								pc.sendPackets(new S_ItemStatus( lockItem));//opqlo 線上更新
								pc.getInventory().removeItem(l1iteminstance, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							}
						} else {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						}
					} else if (itemId == 41428) { // 太古の玉爾
						if (pc != null && l1iteminstance != null) {
							L1Account account = pc.getNetConnection().getAccount();
							if (account == null) {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
								return;
							}
							int characterSlot = account.get_character_slot();
							int maxAmount = Config.DEFAULT_CHARACTER_SLOT
									+ characterSlot;
							if (maxAmount >= 8) {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
								return;
							}
							if (characterSlot < 0) {
								characterSlot = 0;
							} else {
								characterSlot += 1;
							}
							account.set_character_slot(characterSlot);
							AccountReading.get().updateCharacterSlot(pc.getAccountName(), characterSlot);
							pc.getInventory().removeItem(l1iteminstance, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else if (itemId == 40075) { // 防具破壞スクロール
						if(l1iteminstance1 == null){
							//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
							return;
						}
						if (l1iteminstance1.getItem().getType2() == 2) {
							int msg = 0;
							switch (l1iteminstance1.getItem().getType()) {
							case 1: // helm
								msg = 171; // \f1ヘルムが塵になり、風に飛んでいきます。
								break;
							case 2: // armor
								msg = 169; // \f1アーマーが壞れ、下に落ちました。
								break;
							case 3: // T
								msg = 170; // \f1シャツが細かい糸になり、破けて落ちました。
								break;
							case 4: // cloak
								msg = 168; // \f1マントが破れ、塵になりました。
								break;
							case 5: // glove
								msg = 172; // \f1グローブが消えました。
								break;
							case 6: // boots
								msg = 173; // \f1靴がバラバラになりました。
								break;
							case 7: // shield
								msg = 174; // \f1シールドが壞れました。
								break;
							default:
								msg = 167; // \f1肌がムズムズします。
								break;
							}
							pc.sendPackets(new S_ServerMessage(msg));
							pc.getInventory().removeItem(l1iteminstance1, 1);
						} else {
							pc.sendPackets(new S_ServerMessage(154)); // \f1スクロールが散らばります。
						}
						pc.getInventory().removeItem(l1iteminstance, 1);
					} else if (itemId == 49210) { // プロケルの1番目の指令書
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "first_p"));
					} else if (itemId == 49211) { // プロケルの2番目の指令書
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "second_p"));
					} else if (itemId == 49212) { // プロケルの3番目の指令書
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "third_p"));
					} else if (itemId == 49287) { // プロケルの4番目の指令書
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "fourth_p"));
					} else if (itemId == 49288) { // プロケルの5番目の指令書
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "fifth_p"));
					} else if (itemId == 49222) { // オーク密使の笛
						if (pc.isDragonKnight() && pc.getMapId() == 61) { // HC3F
							boolean found = false;
							for (L1Object obj : L1World.getInstance().getObject()) {
								if (obj instanceof L1MonsterInstance) {
									L1MonsterInstance mob = (L1MonsterInstance) obj;
									if (mob != null) {
										if (mob.getNpcTemplate().get_npcId() == 46161) {
											found = true;
											break;
										}
									}
								}
							}
							if (found) {
								pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
							} else {
								L1SpawnUtil.spawn(pc, 46161, 0, 0); // オーク 密使リーダー
							}
							pc.getInventory().consumeItem(49222, 1);
						}
					} else {
						final  int locX = ((L1EtcItem) l1iteminstance.getItem()).get_locx();
						final  int locY = ((L1EtcItem) l1iteminstance.getItem()) .get_locy();
						final  short mapId = ((L1EtcItem) l1iteminstance.getItem()).get_mapid();
						if (locX != 0 && locY != 0) { // 各種テレポートスクロール
							if (pc.getMap().isEscapable() || pc.isGm()) {
								L1Teleport.teleport(pc, locX, locY, mapId,pc.getHeading(), true);
								pc.getInventory().removeItem(l1iteminstance, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(647));
							}
							L1BuffUtil.cancelAbsoluteBarrier(pc); // アブソルート バリアの解除
						} else {
							if (l1iteminstance.getCount() < 1) { // あり得ない？
								pc.sendPackets(new S_ServerMessage(329,l1iteminstance.getLogName())); // \f1%0を持っていません。
							} else {
								pc.sendPackets(new S_ServerMessage(74,l1iteminstance.getLogName())); // \f1%0は使用できません。
							}
						}
					}
					try {
						L1ItemDelay.onItemUse(client, l1iteminstance); // 分類道具使用延遲
					}catch (final Exception e) {
						_log.log(Level.WARNING,"分類道具使用延遲異常:"+l1iteminstance.getItemId(), e);
					}
				}

			}
		} catch (final Exception e) {
			_log.log(Level.SEVERE, e.getLocalizedMessage(), e);

		} finally {
			this.over();
		}
	}
	private void UseArmor(L1PcInstance pc, L1ItemInstance armor) {
		int itemid = armor.getItem().getItemId();
		/**隱身斗篷 延遲*/
		if(itemid == 20077 || itemid == 20062 || itemid == 120077){
			if(pc.getMapId() == 5153){
				pc.sendPackets(new S_ServerMessage(79));
				return;
			}
			if (!armor.isEquipped() ) {
				if(pc.isInvisDelay()){
					pc.sendPackets(new S_ServerMessage(79));
					return;
				}
			}
		}
		int type = armor.getItem().getType();
		L1PcInventory pcInventory = pc.getInventory();
		boolean equipeSpace; // 裝備する個所が空いているか
		if (type == 9) { // リングの場合
			equipeSpace = pcInventory.getTypeEquipped(2, 9) <= 1;
		} else {
			equipeSpace = pcInventory.getTypeEquipped(2, type) <= 0;
		}
		if (equipeSpace && !armor.isEquipped()) { // 使用した防具を裝備していなくて、その裝備個所が空いている場合（裝著を試みる）
			int polyid = pc.getTempCharGfx();

			if (!L1PolyMorph.isEquipableArmor(polyid, type)) { // その變身では裝備不可
				return;
			}
			if (type == 13 && pcInventory.getTypeEquipped(2, 7) >= 1
					|| type == 7 && pcInventory.getTypeEquipped(2, 13) >= 1) { // シールド、ガーダー同時裝備不可
				pc.sendPackets(new S_ServerMessage(124)); // \f1すでに何かを裝備しています。
				return;
			}
			if (type == 7 && pc.getWeapon() != null) { // シールドの場合、武器を裝備していたら兩手武器チェック
				if (pc.getWeapon().getItem().isTwohandedWeapon()) { // 兩手武器
					pc.sendPackets(new S_ServerMessage(129)); // \f1兩手の武器を武裝したままシールドを著用することはできません。
					return;
				}
			}
			if (type == 3 && pcInventory.getTypeEquipped(2, 4) >= 1) { // シャツの場合、マントを著てないか確認
				pc.sendPackets(new S_ServerMessage(126, "$224", "$225")); // \f1%1上に%0を著ることはできません。
				return;
			} else if ((type == 3) && pcInventory.getTypeEquipped(2, 2) >= 1) { // シャツの場合、メイルを著てないか確認
				pc.sendPackets(new S_ServerMessage(126, "$224", "$226")); // \f1%1上に%0を著ることはできません。
				return;
			} else if ((type == 2) && pcInventory.getTypeEquipped(2, 4) >= 1) { // メイルの場合、マントを著てないか確認
				pc.sendPackets(new S_ServerMessage(126, "$226", "$225")); // \f1%1上に%0を著ることはできません。
				return;
			}

			L1BuffUtil.cancelAbsoluteBarrier(pc); // アブソルート バリアの解除
			pcInventory.setEquipped(armor, true);
		} else if (armor.isEquipped()) { // 使用した防具を裝備していた場合（脫著を試みる）
			if (armor.getItem().getBless() == 2) { // 咒われていた場合
				pc.sendPackets(new S_ServerMessage(150)); // \f1はずすことができません。咒いをかけられているようです。
				return;
			}
			if (type == 3 && pcInventory.getTypeEquipped(2, 2) >= 1) { // シャツの場合、メイルを著てないか確認
				pc.sendPackets(new S_ServerMessage(127)); // \f1それは脫ぐことができません。
				return;
			} else if ((type == 2 || type == 3)
					&& pcInventory.getTypeEquipped(2, 4) >= 1) { // シャツとメイルの場合、マントを著てないか確認
				pc.sendPackets(new S_ServerMessage(127)); // \f1それは脫ぐことができません。
				return;
			}
			if (type == 7) { // シールドの場合、ソリッドキャリッジの效果消失
				if (pc.hasSkillEffect(SOLID_CARRIAGE)) {
					pc.removeSkillEffect(SOLID_CARRIAGE);
				}
			}
			pcInventory.setEquipped(armor, false);
		} else {
			pc.sendPackets(new S_ServerMessage(124)); // \f1すでに何かを裝備しています。
		}
		// セット裝備用HP、MP、MR更新
		pc.setCurrentHp(pc.getCurrentHp());
		pc.setCurrentMp(pc.getCurrentMp());
		pc.sendPackets(new S_OwnCharAttrDef(pc));
		pc.sendPackets(new S_OwnCharStatus(pc));
		pc.sendPackets(new S_SPMR(pc));
	}

	private void UseWeapon(L1PcInstance activeChar, L1ItemInstance weapon) {
		L1PcInventory pcInventory = activeChar.getInventory();
		if (activeChar.getWeapon() == null
				|| !activeChar.getWeapon().equals(weapon)) { // 指定された武器が裝備している武器と違う場合、裝備できるか確認
			int weapon_type = weapon.getItem().getType();
			int polyid = activeChar.getTempCharGfx();

			if (!L1PolyMorph.isEquipableWeapon(polyid, weapon_type)) { // その變身では裝備不可
				return;
			}
			if (weapon.getItem().isTwohandedWeapon()&& pcInventory.getTypeEquipped(2, 7) >= 1) { // 兩手武器の場合、シールド裝備の確認
				activeChar.sendPackets(new S_ServerMessage(128)); // \f1シールドを裝備している時は兩手で持つ武器を使うことはできません。
				return;
			}
		}

		L1BuffUtil.cancelAbsoluteBarrier(activeChar); // アブソルート バリアの解除

		if (activeChar.getWeapon() != null) { // 既に何かを裝備している場合、前の裝備をはずす
			if (activeChar.getWeapon().getItem().getBless() == 2) { // 咒われていた場合
				activeChar.sendPackets(new S_ServerMessage(150)); // \f1はずすことができません。咒いをかけられているようです。
				return;
			}
			if (activeChar.getWeapon().equals(weapon)) {// 裝備交換ではなく外すだけ
				pcInventory.setEquipped(activeChar.getWeapon(), false, false,
						false);
				return;
			} else {
				pcInventory.setEquipped(activeChar.getWeapon(), false, false,
						true);
			}
		}

		if (weapon.getItemId() == 200002) { // 咒われたダイスダガー
			activeChar
			.sendPackets(new S_ServerMessage(149, weapon.getLogName())); // \f1%0が手にくっつきました。
		}
		pcInventory.setEquipped(weapon, true, false, false);
	}

	private void doWandAction(L1PcInstance user, L1Object target) {
		if (user.getId() == target.getId()) {
			return; // 自分自身に當てた
		}
		if (user.glanceCheck(target.getX(), target.getY()) == false) {
			return; // 直線上に障害物がある
		}

		// XXX 適當なダメージ計算、要修正
		int dmg = (Random.nextInt(11) - 5) + user.getStr();
		dmg = Math.max(1, dmg);

		if (target instanceof L1PcInstance) {
			L1PcInstance pc = (L1PcInstance) target;
			if (pc.getMap().isSafetyZone(pc.getLocation())
					|| user.checkNonPvP(user, pc)) {// 攻擊できないゾーン
				return;
			}
			if (pc.hasSkillEffect(50) == true || pc.hasSkillEffect(78) == true
					|| pc.hasSkillEffect(157) == true) {// ターゲットがアイス ランス、アブソルート、バリア アース バインド狀態
				return;
			}

			int newHp = pc.getCurrentHp() - dmg;
			if (newHp > 0) {
				pc.setCurrentHp(newHp);
			} else if (newHp <= 0 && pc.isGm()) {
				pc.setCurrentHp(pc.getMaxHp());
			} else if (newHp <= 0 && !pc.isGm()) {
				pc.death(user);
			}
		} else if (target instanceof L1MonsterInstance) {
			L1MonsterInstance mob = (L1MonsterInstance) target;
			mob.receiveDamage(user, dmg);
		}
	}

	private L1ItemInstance createNewItem(L1PcInstance pc,final int item_id,final int count) {
		L1ItemInstance item = ItemTable.getInstance().createItem(item_id);
		if (item != null) {
			item.setCount(count);
			//			if (pc.getInventory().checkAddItem(item, count) == L1Inventory.OK) {
			pc.getInventory().storeItem(item);
			pc.sendPackets(new S_ServerMessage(403, item.getLogName())); // %0を手に入れました。
			//			} else { // 持てない場合は地面に落とす 處理のキャンセルはしない（不正防止）
			//				//L1World.getInstance().getInventory(pc.getX(), pc.getY(), pc.getMapId()).storeItem(item);
			//				return false;
			//			}
		}
		return item;
	}

	private void useToiTeleportAmulet(L1PcInstance pc, int itemId,
			L1ItemInstance item) {
		boolean isTeleport = false;
		if (itemId == 40289 || itemId == 40293) { // 11,51Famulet
			if (pc.getX() >= 32816 && pc.getX() <= 32821 && pc.getY() >= 32778
					&& pc.getY() <= 32783 && pc.getMapId() == 101) {
				isTeleport = true;
			}
		} else if (itemId == 40290 || itemId == 40294) { // 21,61Famulet
			if (pc.getX() >= 32815 && pc.getX() <= 32820 && pc.getY() >= 32815
					&& pc.getY() <= 32820 && pc.getMapId() == 101) {
				isTeleport = true;
			}
		} else if (itemId == 40291 || itemId == 40295) { // 31,71Famulet
			if (pc.getX() >= 32779 && pc.getX() <= 32784 && pc.getY() >= 32778
					&& pc.getY() <= 32783 && pc.getMapId() == 101) {
				isTeleport = true;
			}
		} else if (itemId == 40292 || itemId == 40296) { // 41,81Famulet
			if (pc.getX() >= 32779 && pc.getX() <= 32784 && pc.getY() >= 32815
					&& pc.getY() <= 32820 && pc.getMapId() == 101) {
				isTeleport = true;
			}
		} else if (itemId == 40297) { // 91Famulet
			if (pc.getX() >= 32706 && pc.getX() <= 32710 && pc.getY() >= 32909
					&& pc.getY() <= 32913 && pc.getMapId() == 190) {
				isTeleport = true;
			}
		}

		if (isTeleport) {
			L1Teleport.teleport(pc, item.getItem().get_locx(), item.getItem().get_locy(), item.getItem().get_mapid(), 5, true);
		} else {
			pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
		}
	}





	private void useResolvent(L1PcInstance pc, L1ItemInstance item,
			L1ItemInstance resolvent) {
		if (item == null || resolvent == null) {
			pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
			return;
		}
		if (item.getItem().getType2() == 1 || item.getItem().getType2() == 2) { // 武器・防具
			if (item.getEnchantLevel() != 0) { // 強化濟み
				pc.sendPackets(new S_ServerMessage(1161)); // 溶解できません。
				return;
			}
			if (item.isEquipped()) { // 裝備中
				pc.sendPackets(new S_ServerMessage(1161)); // 溶解できません。
				return;
			}
		}
		int crystalCount = ResolventTable.getInstance().getCrystalCount(
				item.getItem().getItemId());
		if (crystalCount == 0) {
			pc.sendPackets(new S_ServerMessage(1161)); // 溶解できません。
			return;
		}

		int rnd = Random.nextInt(100) + 1;
		if (rnd >= 1 && rnd <= 50) {
			crystalCount = 0;
			pc.sendPackets(new S_ServerMessage(158, item.getName())); // \f1%0が蒸發してなくなりました。
		} else if (rnd >= 51 && rnd <= 90) {
			crystalCount *= 1;
		} else if (rnd >= 91 && rnd <= 100) {
			crystalCount *= 1.5;
			pc.getInventory().storeItem(41246, (int) (crystalCount * 1.5));
		}
		if (crystalCount != 0) {
			L1ItemInstance crystal = ItemTable.getInstance().createItem(41246);
			crystal.setCount(crystalCount);
			if (pc.getInventory().checkAddItem(crystal, 1) == L1Inventory.OK) {
				pc.getInventory().storeItem(crystal);
				pc.sendPackets(new S_ServerMessage(403, crystal.getLogName())); // %0を手に入れました。
			} else { // 持てない場合は地面に落とす 處理のキャンセルはしない（不正防止）
				L1World.getInstance()
				.getInventory(pc.getX(), pc.getY(), pc.getMapId()).storeItem(crystal);
			}
		}
		pc.getInventory().removeItem(item, 1);
		pc.getInventory().removeItem(resolvent, 1);
	}

	//TODO 魔法娃娃DB化
	private void useFurnitureRemovalWand(final L1PcInstance pc,final int targetId,final L1ItemInstance item) {
		S_AttackPacket s_attackPacket = new S_AttackPacket(pc, 0,ActionCodes.ACTION_Wand);
		pc.sendPackets(s_attackPacket);
		pc.broadcastPacketAll(s_attackPacket);
		final int chargeCount = item.getChargeCount();
		if (chargeCount <= 0) {
			return;
		}

		final L1Object target = L1World.getInstance().findObject(targetId);
		if (target != null && target instanceof L1FurnitureInstance) {
			final L1FurnitureInstance furniture = (L1FurnitureInstance) target;
			furniture.deleteMe();
			FurnitureSpawnTable.getInstance().deleteFurniture(furniture);
			item.setChargeCount(item.getChargeCount() - 1);
			pc.getInventory().updateItem(item, L1PcInventory.COL_CHARGE_COUNT);
		}
	}

	private void UseHeallingPotion(final L1ItemInstance l1iteminstance,final L1PcInstance pc){
		final int itemId = l1iteminstance.getItemId();
		/*
		if(特殊列表.get().get補品列表(itemId)!=null){
			pc.getInventory().removeItem(l1iteminstance, 1);
			int[] values = 特殊列表.get().get補品列表(itemId);
			if (pc.hasSkillEffect(POLLUTE_WATER)) { // ポルートウォーター中は回復量1/2倍
				values[0] =values[0]>>1;
			}
			values[0]*= new java.util.Random().nextGaussian() / 5.0D + 1.0D;
			pc.sendPacketsX8(new S_SkillSound(pc.getId(), values[1]));
			//		_pc.sendPackets(new S_ServerMessage(77)); // \f1氣分が良くなりました。
			pc.setCurrentHp(pc.getCurrentHp() + values[0]);
		}else{
			if ((itemId >=780001 && itemId <=780006)||
					(itemId >=780023 && itemId <=780028)){//opqlo 神力藥水
				if(pc.getExpRate!=1 && pc.hasSkillEffect(EXP_UP)){
					pc.sendPackets(new S_SystemMessage("經驗加"+pc.getExpRate+"倍還剩下:[ "+pc.getSkillEffectTimeSec(EXP_UP)+" ]秒。"));
				}else{
					ExpUp(pc,itemId);
					pc.getInventory().removeItem(l1iteminstance,1);
				}
			}else if (itemId >=780007 && itemId <= 780012){
				pc.getInventory().removeItem(l1iteminstance,1);
				SpeedUp(pc, itemId);
			}else{
				pc.sendPackets(new S_SystemMessage("錯誤道具編號。"));
			}
		}
		 */
		int hp =0,effect=0;
		switch(itemId){
		case POTION_OF_HEALING:
		case CONDENSED_POTION_OF_HEALING:
		case 40029:
			hp=15; effect=189;
			break;
		case 40022:// 古代の體力回復劑
			hp=20; effect=189;
			break;
		case POTION_OF_EXTRA_HEALING:
		case CONDENSED_POTION_OF_EXTRA_HEALING:
			hp=45; effect=194;
			break;
		case 40023:// 古代の高級體力回復劑
			UseHeallingPotion(pc,30, 194);
			hp=30; effect=194;
			break;
		case POTION_OF_GREATER_HEALING:
		case CONDENSED_POTION_OF_GREATER_HEALING:
			hp=75; effect=197;
			break;
		case 40024:// 古代の強力體力回復劑
			hp=55; effect=197;
			break;
			/*case 40506: // エントの實
			C_Potion.UseHeallingPotion(pc, 70, 197);
			pc.getInventory().removeItem(l1iteminstance, 1);
			break;*/
		case 40026: case 40027: case 40028: // ジュース
			hp=25; effect=189;
			break;
		case 40058:// きつね色のパン
			hp=30; effect=189;
			break;
		case 40071:// 黑こげのパン
			hp=70; effect=197;
			break;
		case 40734:// 信賴のコイン
			hp=50; effect=189;
			break;
		case B_POTION_OF_HEALING:
			hp=25; effect=189;
			break;
		case C_POTION_OF_HEALING:
			hp=10; effect=189;
			break;
		case  B_POTION_OF_EXTRA_HEALING:// 祝福されたオレンジ ポーション
			hp=55; effect=194;
			break;
		case B_POTION_OF_GREATER_HEALING:// 祝福されたクリアーポーション
			hp=85; effect=197;
			break;
			/*case 140506:// 祝福されたエントの實
			C_Potion.UseHeallingPotion(pc, 80, 197);
			pc.getInventory().removeItem(l1iteminstance, 1);
			break;*/
		case RABBIT_LIVER:// 兔子的肝
			hp=1500; effect=189;
			break;
		case 41403:// 庫傑的糧食
			hp=300; effect=189;
			break;
		case 41417: case 41418: case 41419: case 41420: case 41421: // 「アデンの夏」イベント限定アイテム
			hp=90; effect=197;
			break;
		case 41337:// 受祝福的五穀麵包
			hp=85; effect=197;
			break;
		case 41298:// 鱈魚
			hp=4; effect=189;
			break;
		case 41299:// 虎班帶魚
			hp=15; effect=194;
			break;
		case 41300:// 鮪魚
			hp=35; effect=197;
			break;
		case 41411:// 銀粽子
			hp=10; effect=189;
			break;
		case 780014:// 快克藥水
			hp=350; effect=197;
			break;
		case 780032://情人節巧克力
			hp=1000; effect=198;
			break;
		case 780033	://中型治癒藥水
			hp = 350; effect=189;
			break;
		case 780034	://大型治癒藥水
			hp = 700; effect = 189;
			break;
		case 780037 : case 78048://烤肉串 南瓜籽
			hp = 700; effect = 189;
			break;
			/*_補品列表.put(new Integer(  780049 ), new int[]  { 350 , 189 });//拐杖糖
		_補品列表.put(new Integer(  780052 ), new int[]  { 700 , 189 });//聖誕大餐*/
		case 780049:
			hp = 350 ; effect = 189;
			break;
		case 780052:
			hp = 700; effect = 189;
			break;
		default: 
			if ((itemId >=780001 && itemId <=780006)||
					(itemId >=780023 && itemId <=780028)
					||(itemId >=77781 && itemId <= 77783)){//opqlo 神力藥水
				this.ExpUp(pc,itemId);
				pc.getInventory().removeItem(l1iteminstance,1);
			}else if (itemId >=780007 && itemId <= 780012){
				pc.getInventory().removeItem(l1iteminstance,1);
				SpeedUp(pc, itemId);
			}else{
				pc.sendPackets(new S_SystemMessage("錯誤道具編號。"));
			}
			return;

		}
		if (pc.hasSkillEffect(POLLUTE_WATER)) { // ポルートウォーター中は回復量1/2倍
			hp =hp>>1;
		}
		hp*= new java.util.Random().nextGaussian() / 5.0D + 1.0D;
		UseHeallingPotion(pc,hp, effect);
		pc.getInventory().removeItem(l1iteminstance, 1);

	}
	private void UseHeallingPotion(final L1PcInstance pc,final int healHp,final int gfxid) {
		// アブソルート バリアの解除
		S_SkillSound ss =new S_SkillSound(pc.getId(), gfxid);
		pc.sendPackets(ss);
		pc.broadcastPacketAll(ss);
		//		_pc.sendPackets(new S_ServerMessage(77)); // \f1氣分が良くなりました。
		pc.setCurrentHp(pc.getCurrentHp() + healHp);
	}

	private void ExpUp(final L1PcInstance pc ,final int itemId){

		switch(itemId){
		case 780001: case 780004://150%神力藥水
			pc.getExpRate = 1.5;
			break;
		case 780002: case 780005://200%神力藥水
			pc.getExpRate = 2;
			break;
		case 780003: case 780006://250%神力藥水
			pc.getExpRate = 2.5;
			break;
		case 780023:case 780026:
			pc.getExpRate = 3;
			break;
		case 780024:case 780027:
			pc.getExpRate = 4;
			break;
		case 780025:case 780028:
			pc.getExpRate = 5;
			break;
		case 77781:
			pc.getExpRate = 6;
			break;
		case 77782:
			pc.getExpRate = 6.5;
			break;
		case 77783:
			pc.getExpRate = 7;
			break;
		}

		pc.setSkillEffect(EXP_UP, 3600000);
		pc.sendPackets(new S_SystemMessage("經驗倍率上升"+pc.getExpRate+"倍，持續60分鐘。"));
		pc.set_food((short) 225);
		pc.sendPackets(new S_PacketBox(S_PacketBox.FOOD, (short) 225));
		pc.sendPackets(new S_PacketBox(53, 7, 3600));//opqlo 經驗狀態時間顯示
		pc.sendPackets(new S_PacketBox(S_PacketBox.FOOD, (short) 225));

		//		pc.sendPackets(new S_PacketBox(53, 23, 3600));//opqlo 經驗狀態時間顯示
	}

	private void SpeedUp(final L1PcInstance pc ,final int itemId ){
		byte type = 0;
		switch(itemId){

		case 780007: case 780010:
			type = 1;
			break;
		case 780008: case 780011:
			type =2;
			break;
		case 780009: case 780012:
			type =3;
			break;
		}

		L1BuffUtil.supperSpeed(pc, 600000 , type);
	}

	// 隱身狀態下可用的魔法
	/**去除 加速術43*/
	private static final int[] CAST_WITH_INVIS = { 1, 2, 3, 5, 8, 9, 12, 13,
		14, 19, 21, 26, 31, 32, 35, 37, 42, 44, 48, 49, 52, 54, 55, 57,
		60, 61, 63, 67, 68, 69, 72, 73, 75, 78, 79, REDUCTION_ARMOR,
		BOUNCE_ATTACK, SOLID_CARRIAGE, COUNTER_BARRIER, 97, 98, 99, 100,
		101, 102, 104, 105, 106, 107, 109, 110, 111, 113, 114, 115, 116,
		117, 118, 129, 130, 131, 133, 134, 137, 138, 146, 147, 148, 149,
		150, 151, 155, 156, 158, 159, 163, 164, 165, 166, 168, 169, 170,
		171, SOUL_OF_FLAME, ADDITIONAL_FIRE, DRAGON_SKIN, AWAKEN_ANTHARAS,
		AWAKEN_FAFURION, AWAKEN_VALAKAS, MIRROR_IMAGE, ILLUSION_OGRE,
		ILLUSION_LICH, PATIENCE, ILLUSION_DIA_GOLEM, INSIGHT, PANIC,
		ILLUSION_AVATAR};
	/**
	 * 該技能可否在隱身狀態使用
	 * @param useSkillid 技能編號
	 * @return true:可 false:不可
	 */
	private boolean isInvisUsableSkill(final int useSkillid) {
		for (final int skillId : CAST_WITH_INVIS) {
			if (skillId == useSkillid) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 該道具是否符合強化條件
	 * @param L1PcInstance 角色  targetItem 對象道具 type 類型  1=武器、2=防具、haveMax 是否有上限
	 * @return true:可以強化 false:不可強化
	 * */
	private boolean checkEnchant(final L1PcInstance pc ,final L1ItemInstance targetItem , final byte type , final boolean haveMax){

		if(targetItem == null){
			//_log.log(Level.SEVERE , itemId +"警告:空的對象物品: "+l+" 角色名稱: "+pc.getName());
			return false;
		}
		if (targetItem.getDeleteDate() != null) {//opqlo 道具天數刪除系統(不可強化)
			pc.sendPackets(new S_ServerMessage(79));
			return false;
		}
		if(targetItem.isIdentified() == false){
			pc.sendPackets(new S_SystemMessage("必須要先鑑定這個物品。"));
			return false;
		}
		final L1Item item = targetItem.getItem();

		if(item.get_safeenchant() <0 || item.getBless() >=128){
			pc.sendPackets(new S_SystemMessage("這是無法強化的物品。"));
			return false;
		}
		if(item.getType2()!= type){
			if(type ==1){
				pc.sendPackets(new S_SystemMessage("只能對武器使用。"));
			}else if(type ==2){
				pc.sendPackets(new S_SystemMessage("只能對防具使用。"));	
			}
			return false;
		}
		if(haveMax){
			if(type ==1){
				if(targetItem.getEnchantLevel() >=WEAPON_MAX_ENCHANT_LV){
					pc.sendPackets(new S_ServerMessage(166,targetItem.getLogName()+" 強化已達上限 "+WEAPON_MAX_ENCHANT_LV));
					return false;
				}
			}else if(type ==2){
				if(targetItem.getEnchantLevel() >=ARMOR_MAX_ENCHANT_LV){
					pc.sendPackets(new S_ServerMessage(166,targetItem.getLogName()+" 強化已達上限 "+ARMOR_MAX_ENCHANT_LV));
					return false;
				}
			}
		}
		return true;
	}


	@Override
	public String getType() {
		return C_ITEM_USE;
	}
}

